我们有一个Java应用程序,它始终显示100%的CPU使用率。当我注意到top
命令发现一些奇怪的结果时,我试图找出是否有一些支配线程。
如果我运行top
,则会显示具有100%CPU时间的一个 java进程。然后我输入H
来显示线程,它首先显示几个 Java线程,每个线程100%。但是,在下一次刷新时,它再次显示了不同批次的几个Java线程,每个线程都有100%的CPU。下一次刷新,另一批。这种情况持续了几个刷新周期,通过100个左右的100%CPU线程。最后,它与大约十几个Java线程安定下来,每个线程的CPU时间大约为10%。这个“最终”线程集是在开始时显示100%CPU时间的相同线程,但现在它们每个只有10%。如果直接运行top -H
,我会直接进入最终设置。
我的直觉是Java线程的100%CPU有些虚假。但我无法找到解释。
我在Debian Wheezy的盒子里。
答案 0 :(得分:1)
使用perl线程我已经超过了100%,所以我认为top绝对不是线程感知的。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19841 v807576 15 0 402m 13m 2184 S 498.7 0.1 9:14.71 mt_analyze_ets
其实不是真的。使用-H选项,我得到了:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+COMMAND
18118 v807576 18 0 653m 22m 2164 R 96.3 0.1 0:02.98 mt_analyze_et
18124 v807576 18 0 653m 22m 2164 R 96.3 0.1 0:02.98 mt_analyze_ets
18117 v807576 18 0 653m 22m 2164 R 95.3 0.1 0:02.95 mt_analyze_ets
18121 v807576 18 0 653m 22m 2164 R 94.7 0.1 0:02.93 mt_analyze_ets
18127 v807576 18 0 653m 22m 2164 R 94.3 0.1 0:02.92 mt_analyze_ets
18133 v807576 18 0 653m 22m 2164 R 94.3 0.1 0:02.92 mt_analyze_ets
18136 v807576 18 0 653m 22m 2164 R 94.3 0.1 0:02.92 mt_analyze_ets
18145 v807576 18 0 653m 22m 2164 R 94.0 0.1 0:02.91 mt_analyze_ets
18142 v807576 18 0 653m 22m 2164 R 93.1 0.1 0:02.88 mt_analyze_ets
18130 v807576 18 0 653m 22m 2164 R 92.1 0.1 0:02.85 mt_analyze_ets
18148 v807576 18 0 653m 22m 2164 R 90.8 0.1 0:02.81 mt_analyze_ets
18116 v807576 18 0 653m 22m 2164 S 5.2 0.1 0:00.16 mt_analyze_ets