服务器CPU高居不下,JAVA线程占用排查方式
作者:保护我方胖虎
这篇文章主要介绍了服务器CPU高居不下,JAVA线程占用排查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
服务器CPU高居不下,JAVA线程占用排查
排查Java进程中确定哪个线程正在占用CPU的时间。
详细步骤
1、首先确定进程的 ID
可以使用 jps -v 或者 top 命令直接查看
jps -v
我们这里使用进程ID (PID) 11646
2、查看该进程中哪个线程占用大量 CPU
执行 top -H -p [PID]
结果如下:
top -H -p 11646
3、接下来我们将进程中的所有线程输出到一个文件中
执行:jstack [PID] > 文件名
jstack 11646 > test-jstack.txt
4、在进程中查找对应的线程 ID
执行:cat 输出文件名 | grep -i 16进制线程号
假设我们想看编号为 5331这个线程,首先将 5331线程号转成 16 进制是 14d3
cat test-jstack.txt |grep -i 14d3
结果是:
找到问题!
JAVA高内存占用排查
1、查看java进程
#获取进程号 ps -ef|grep java
2、使用top命令查看内存占用
# 查看占用内存最多的线程 top -Hp 进程号
3、将线程号转为16进制
printf "%x\n" 线程号
4、使用jstack打印出当前线程的信息
jstack 进程号 | grep -20 线程16进制
5、使用jstack 将线程信息输出到文本
jstack -l 进程号 >> jstack.log
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。