java 什么计算消耗cpu_java调优1:找出Java进程中大量消耗CPU

本文介绍了如何分析和解决Java程序中CPU消耗过高的问题,通过top命令找到高CPU占用进程,使用jstack获取线程堆栈信息,转换线程ID并定位问题代码,从而帮助开发者定位和修复性能瓶颈。
摘要由CSDN通过智能技术生成

问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况。2,程序代码有问题,出现死循环,可能性极大。问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。解决过程:1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:[root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn显示结果如下:USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIMEroot     10.5  19    - -         -      -  3626 00:12:48root     10.1  19    - -         -      -  3593 00:12:16找到了耗时最高的线程3626,占用CPU时间有12分钟了!将需要的线程ID转换为16进制格式:[root@localhost logs]# printf "%x\n" 3626e18最后打印线程的堆栈信息:[root@localhost logs]# jstack 2633 |grep e18 -A 30将输出的信息发给开发部进行确认,这样就能找出有问题的代码。通过最近几天的监控,CPU已经安静下来了。

问题分析:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值