发现java程序cpu利用率100%的解决方法

最近发现一个java程序的cpu利用率总是在100%,开始没注意,以为是有负载在正常跑,后来发现不是这么一个情况,应该是程序里的某个线程在死循环中,只是程序里面n多线程,怎么知道是哪个线程把cpu占满了?


1)先用top找出哪个线程占着cpu

shell下面用

[engine@tempt145 /data/itnProduct/ds2]$ top -H -p 8969

结果

top - 17:59:02 up 113 days,  1:37,  2 users,  load average: 0.00, 0.30, 0.66
Tasks:  52 total,   0 running,  52 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us,  0.1%sy,  0.0%ni, 99.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32950552k total, 32318012k used,   632540k free,   249572k buffers
Swap: 34996216k total,  8301540k used, 26694676k free, 10734080k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                          
 8969 engine    21   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8971 engine    25   0 2544m 363m 9864 S  0.0  1.1   0:04.25 java                                                                                                                              
 8972 engine    23   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8973 engine    24   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8974 engine    19   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8975 engine    19   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8976 engine    19   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8977 engine    19   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java                                                                                                                              
 8978 engine    19   0 2544m 363m 9864 S  0.0  1.1   0:00.00 java    

找到cpu为100%的PID

2)

jsack -F 8969 > cpu_100

然后在cpu_100里面找到刚刚定位的PID,这里面会精确的告诉你是哪行代码让cpu100%了


嗯 到于是什么原因把cpu搞成100%的,下一篇blog在说




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值