分析java程序中cpu占用过高的线程

非 Y 不嫁゛ 提交于 2019-12-19 12:29:45

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

服务器接收请求响应特别慢,用top一看,服务端的一个java服务占用cpu1800%多(24核心)。

该服务里面跑了很多线程,于是想找到是谁引起的

  1. 首先dump出该进程的所有线程及状态

使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈.

jstack -l 20228 > xxx.log

将堆栈信息找出来放到日志信息中

    2.  使用top命令找到耗cpu的线程

    使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高.

是不是很震撼,基本上所有的cpu都快满负荷运行了,这些肯定不是正常的java进程

3.  结合堆栈信息查看

进制转换网站:http://tool.oschina.net/hexconvert/   用来将进程号转换为16进制

20230  -->  4f06

原来是触发了GC,所以请求都无法及时相应了,接下来要做的就是找找是什么触发了GC

 

参考:http://www.cnblogs.com/skyaccross/archive/2012/12/22/2829000.html

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!