在加载下测试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连接到数据库,发送一些查询并等待响应,比如10‘s,这些10’s显然被算作/usr/sbin/mysqld CPU使用量。然后java线程恢复并完成它的操作,再消耗20‘s,相当于5+10+20=30ms的总执行时间。
而新手的问题是:您不认为这些与db相关的10 is被计算了两次:一次是作为等待db处理查询的java线程,另一次是作为数据库CPU使用本身?我有什么不明白的?
发布于 2011-04-11 19:37:59
当进程简单地等待套接字时,它通常不会使用大量的CPU。基本上,内核知道它处于等待状态,不会安排它运行--除了信号处理之类的小事情,例如定期运行垃圾收集器。
(好吧,如果有很多垃圾要收集,那“小东西”可能就不会那么少了。)
https://stackoverflow.com/questions/5626468
复制相似问题