Java + JDBC 的 CPU 使用率

3

在Linux下测试我的Web应用程序的负载时,我得到了以下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。
新手问题是:你不认为这些与数据库相关的10ms被计算了两次吗:一次是java线程等待数据库处理查询,另一次是数据库本身的CPU使用率?我在这里理解错了什么吗?
1个回答

4

当进程仅仅在等待套接字操作时,通常不会使用大量的CPU。基本上,内核知道它处于等待状态,并且不会调度它运行,除了一些小事情,如信号处理,可以用来定期运行垃圾回收器。

(如果有大量垃圾需要收集,那么这个“小事情”可能就不是那么小了。)


谢谢,我应该自己猜到CPU时间是以更细粒度的方式计算的。显然这是缺乏低级编程经验的不足之处。 - andbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接