【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
服务器接收请求响应特别慢,用top一看,服务端的一个java服务占用cpu1800%多(24核心)。
该服务里面跑了很多线程,于是想找到是谁引起的
- 首先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
来源:oschina
链接:https://my.oschina.net/u/2499632/blog/688379