本文章参考了 葛一鸣 讲解的 深入JVM内核——原理、诊断与优化
一 定位cpu占用高问题(linux系统):
1 使用top命令查看占用cpu进程情况
2 查看是否是java进程(不是的话java自带工具就不能定位了),是java进程造成的话,使用jsp命令
简单的列出java进程pid与类名
3 使用pidstat定位是那些线程的原因
pidstat -p 进程id 采样间隔时间与次数 -u(-u是监控cpu) -t (-t显示线程)
例:pidstat -p 3455 1 3 -u -t
4 使用jstack命令输出线程信息
jstack 线程id
例:jstack 3455
说明:0xd8b就是3467
从图中我们得到在HoldCPUMain类的第8行在运行,可能这里有问题去查看一下定位问题;
二 例子:运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。
t.txt:
我们发现程序正在等在输入值