如何快速定位JVM中消耗CPU最多的线程?
第一步、先找出Java的进程PID
ps -ef | grep 进程名关键字
这里假设找到的PID是:12345
第二步、找出该进程内最消耗CPU的线程
top -Hp 12345 17183 log4x 20 0 4292820 529812 23040 R 94.7 0.8 1:11.79 java -server -Xms268435456 -Xmx268435456 17162 log4x 20 0 4292820 529812 23040 R 87.1 0.8 1:17.90 java -server -Xms268435456 -Xmx268435456 17172 log4x 20 0 4292820 529812 23040 R 86.1 0.8 1:16.26 java -server -Xms268435456 -Xmx268435456 17176 log4x 20 0 4292820 529812 23040 R 68.0 0.8 1:12.31 java -server -Xms268435456 -Xmx268435456 17170 log4x 20 0 4292820 529812 23040 S 7.3 0.8 0:44.70 java -server -Xms268435456 -Xmx268435456
第三步、将线程编号转换成十六进制
[root@test185 ~]# printf "%x\n" 17183 431f
第四步、用jstack PID打印出进程内所有的线程堆栈
jstack 12345 > 12345.txt
第五步、根据线程的十六进制编码,在堆栈文件中定位具体的线程堆栈。
nid=0x431f
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?