如果你的JAVA程序CPU占用率很高或者一直保持在一个很高的线上,说明有的线程占用的CPU的资源,这个时候,就需要分析一下,是什么线程占用的CPU的使用率
当前CPU被当前JAVA的哪个线程占有,是否是必要的,是否要优化了
下面简单的说说,如何使用JVM自带的jstack来找到是哪个线程占用cpu使用率的过程
首先,要知道是JAVA进程内的哪个线程占用了比较高的CPU。
1.top -H <java pid> //查看占CPU使用率的进程排名
2.使用jstack查看进程
jps
查看当前java进程
jstack <java ipd> ]|grep -A 10 [线程的16进制]
2.使用shift+h 进程线程视图,查看线程ID。
如上图,可以看到两个线程18006和18005占用了100%和99%的CPU。
linux上的线程ID是10进程的,JUMP出来的线程ID是16进制的,使用计算器换算一下,分别得到两个线程ID是4655,4656。
可以看到。两个ID在dump文件中的代码了。
跟代码中一致,这边我写了个
while(true){
}去receive socket的返回。一直在轮询。导致 CPU居高不下。
每次轮询完。Sleep一下就可以结均这个问题