使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

本文介绍了如何在Linux系统中利用JVM自带工具诊断CPU占用高和程序假死问题。首先,通过top命令查看CPU占用高的进程,接着使用jps找出Java进程,并使用pidstat进行线程分析。然后,借助jstack输出线程堆栈信息,以定位问题所在。例如,通过jstack发现HoldCPUMain类的第8行可能存在问题。此外,还给出一个程序ThreadBlockMain假死的例子,其在等待输入值导致阻塞。
摘要由CSDN通过智能技术生成

本文章参考了 葛一鸣 讲解的 深入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:


我们发现程序正在等在输入值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值