在linux中的java服务器CPU使用情况监视器
我在java中测试我的服务器,并监视它的CPU使用情况。 首先,我使用top命令,它告诉我,如下所示:在linux中的java服务器CPU使用情况监视器
然后,我用命令
PS -C的Java -1-邻PCPU,CPU,美观大方,状态,cputime,pid,tid |排序 来显示所有的Java线程
第一列是每个线程的CPU使用情况。
我刚刚发现最高使用率仅为0.3,所有cpu使用量总和远低于31.6。
我希望有人能告诉我为什么,THKS
编辑:
要了解更多信息,我用顶部-Hp 1234(1234is我的Java PID) ,我突然发现了存在java线程(pidis 1238)和CPU使用率通常突然提升到10-20甚至更多,我认为这是应该受到指责的。
然后我用
jstack 1234 | grep的4D6 -A 30
看到线程的更多细节,而事实证明,我说:
“VM主题“prio = 10 tid = 0x00007ff6ec060000 nid = 0x4d6 runnable
”VM周期性任务线程“prio = 10 tid = 0x00007ff6ec091800 n ID = 0x4dd 等待条件
JNI全局引用:262
我希望你可以帮我分析一下。
也许对pcpu
值有误解。从man ps
CPU使用率目前表现为时间的百分比花了过程的整个生命周期内运行。这并不理想,并且不符合ps另外符合的标准。 CPU使用率不太可能精确到100%。
如果进程启动并且CPU利用率很高,那么%CPU
的值很高。当相同的进程稍后CPU利用率较低或处于睡眠状态时,此值会降低。 %CPU
代表cputime/realtime ratio
。
作为一个小例子
class Loop {
public static void main(String...args) throws Exception {
long l = 0;
for (int i = 0; i >= 0; i++) {
for (int j = 0; j < 50; j++) {
l++;
}
}
System.out.println("will sleep now");
Thread.sleep(30_000);
}
}
开始在下面的命令一个会话,这将监视处理在一秒的间隔。
watch -n 1 ps -C java -o pcpu,state,cputime,etimes
现在在另一个会话中运行示例代码。
只要Java代码在foo循环中并且未打印will sleep now
%CPU
的值非常高(约为100)。当Java进程达到Thread.sleep
时,%CPU
的值将不断减少(在此示例中)。
尝试使用'htop'获取详细信息 –
THKS for answer,我已经安装并习惯了htop,但是它并没有解决我的问题,我想要的是看到每个java线程的CPU使用情况,因为在我的显示器显示得太高,但我得到每个java线程的java cpu使用率都低于0.3%。 –
因为线程列表在不同于总和值(31.6)的时刻由'ps'输出。两者不匹配。 –