线上一次排错:JAVA程序占用CPU超过100%

前言:今天在线上发现程序接口有点慢,去服务器上top看了一下原因,是cpu占用太大,后面把解决过程分享出来

top截图:

从截图中可以看到,PID为25364的java应用cpu使用率为145.5%,超级不正常

解决方法:使用jstack工具分析线程,我的java安装的是openJdk,需要重新安装jstack 工具

--安装jstack

yum install java-1.8.0-openjdk-devel -y

--获取线程信息

top -p 25364 -H 

 有图可以看到,PID为28157的线程造成的CPU占用过高。

--将PID为28157的线程的进程号转换成16进制为6dfd,在使用jstack获取线程的具体信息

jstack 25364 |grep -A 10 0x6dfd

获取如下结果:

有图可以看到,原因是:at com.hty.b2c.controller.MegPay.msgWeChatApi(MegPay.java:168),查看代码:

应该是string类型的字符串隐式转换成了StringBuilder, StringBuilder是线程不安全的,将该处代码改写成StringBuffer即可。

备注:还可以使用jmap指令查看具体堆内存使用状况:jmap -histo pid |less 可以查看具体是那个对象占用内存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值