在这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结;linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找:
第一步:登陆到web服务所在的liunx服务器,利用top命令获取java的cpu使用率
第二步:
如上图所示,java的进程id为'3260',接下来用top命令单独对这个进程中的所有线程作监视:top -p 3260 -H
第三步:
如上图所示,linux下,所有的java内部线程,其实都对应了一个进程id,也就是说,linux上的sun jvm将java程序中的线程映射为了操作系统进程;我们看到,占用CPU资源最高的那个进程id是'3740',这个进程id对应java线程信息中 的'nid'('n' stands for 'native');
第四步:
要想找到到底是哪段具体的代码占用了如此多的资源,先使用jstack打出当前栈信息到一个文件里, 比如mystack.log:jstack 3260 > mystack.log
第五步:
将3740转换成十六进制的数字为e9c,在mystack.log文件中找出nid=oxe9c的线程,然后在该线程中排查代码问题
时间: 2024-09-20 00:19:29