java 启动负载高_Java进程线程 CPU 占用高负载高问题排查

java -jar 运行应用,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。

问题分析:

1,程序属于CPU密集型,和开发沟通过,排除此类情况。

2,程序代码有问题,出现死循环,或是死锁, 可能性极大。

过程:

1.代码是不能定位,从日志上也无法分析得出。

2.top,发现PID,83021 的Java进程占用CPU高达900%,出现故障。

3.找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:ps -mp 83021 -o THREAD,tid,time | sort -rn | head -n 10

USER     %CPU PRI SCNT WCHAN  USER SYSTEM    TID     TIME

ubox     88.9  19    – futex_    –      –  83032 08:21:49

ubox     88.9  19    – –         –      –  83031 08:21:49

ubox     88.9  19    – –         –      –  83030 08:21:49

ubox     88.9  19    – –         –      –  83028 08:21:49

ubox     88.9  19    – –         –      –  83027 08:21:49

ubox     88.9  19    – –         –      –  83025 08:21:49

ubox     88.9  19    – –         –      –  83024 08:21:49

ubox     88.9  19    – –         –      –  83023 08:21:49

ubox      712   –    – –         –      –      – 2-18:57:53

找到了耗时最高的线程83032,占用CPU时间超过8小时了!

4.将需要的线程ID转换为16进制格式:

printf “%x\n” 83032

14458

5.最后打印线程的堆栈信息:jstack 83021 | grep 14458 -A 5

6.将输出的信息给开发部进行确认,这样就能找出有问题的代码。

通过最近几天的监控,CPU已经安静下来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值