服务系能查看-通过gc和cpu定位代码问题

本文介绍如何通过top、jstack、jmap等工具排查Java应用中的CPU占用过高及内存泄漏问题,包括获取资源占用信息、定位问题代码位置及分析GC状况的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-----------------------------------------------cpu占用高----------------------------------------------------------------
0.查看当前资源占用情况
a) top 看一下当前内存和cpu情况
b) top -H -P (进程号) 看一下占用最高的进程,会显示进程号中,每个线程的cpu使用情况
c) 得到最高实用的cpu的线程号(如23621,24827)




1.查看进程号
ps axu|grep tomcat  ||  ./jdk-7u51-linux-x64/jdk1.7.0_51/bin/jps
比如此时tomcat的进程号是24412


2.查看程序崩溃前,正在运行的代码
./jdk-7u51-linux-x64/jdk1.7.0_51/bin/jstack 24412 | less


3.查询资源占用高的进程号,在jstack中的运行具体地址
把23621,24827转化为16进制,到jstack 24412导出的文件中,去搜索对应的代码具体地址
也可以先查看下jstack导出的文件中,当前线程运行情况

grep java.lang.Thread.State stack.log | awk '{print $2$3$4$5}' | sort | uniq -c,如:

24 RUNNABLE
34 TIMED_WAITING(onobjectmonitor)
96 TIMED_WAITING(parking)
5 TIMED_WAITING(sleeping)
2 WAITING(onobjectmonitor)
34 WAITING(parking)



---------------------------------------------------内存占用高------------------------------------------------------------
比如此时tomcat的进程号是24412
1.查看当前内存使用情况(PS Old Generation非常高甚至达到最大内存数时,gc不动会oom)
jdk-7u51-linux-x64/jdk1.7.0_51/bin/jmap -heap 24412|more


2.查看当前内存中对象的数量和大小
jdk-7u51-linux-x64/jdk1.7.0_51/bin/jmap -histo:live 24412|more


3.查看当前内存的gc情况
jdk-7u51-linux-x64/jdk1.7.0_51/bin/jstat –gcutil 24412 2000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值