Java + JDBC的CPU使用率

时间:2011-04-11 19:29:52

标签: java multithreading operating-system

在负载下测试我的webapp时,我在Linux下获得了top摘录:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
3964 nobody    20   0 4965m 622m 6048 S  8.5 11.0   6:02.49 java 
1985 mysql     20   0  294m 125m 3804 S  2.1  2.2   0:05.39 /usr/sbin/mysqld

我需要对java的%CPU列进行解释。据我所知,在Web请求期间,java的一个线程正在执行一些纯Java逻辑,消耗一些CPU时间(让它为5ms)。然后它通过JDBC连接到数据库,发送一些sql查询并等待,例如 10ms ,以进行响应。这些 10ms 显然被计为/usr/sbin/mysqld CPU使用率。然后java线程恢复它的操作并完成,耗费另外20ms,总计执行时间为5 + 10 + 20 = 30ms。

新手问题是:你不认为这些与db相关的 10ms 被计算两次:一次是java线程等待db处理查询而第二次作为数据库CPU使用本身?我在这里不明白什么?

1 个答案:

答案 0 :(得分:4)

当进程只是在套接字上等待时,通常不会使用大量的CPU。基本上,内核知道它处于等待状态并且不会安排它运行 - 除了信号处理这样的小事情,例如可以使用它。定期运行垃圾收集器。

(好吧,如果要收集大量垃圾,那么“小东西”可能不会那么少。)