java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 服务器CPU高居不下,JAVA线程占用排查

服务器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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文