欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-30 13:58:40
...

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

top截图:

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

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

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

--安装jstack

yum install java-1.8.0-openjdk-devel -y

--获取线程信息

top -p 25364 -H 

线上一次排错:JAVA程序占用CPU超过100% 有图可以看到,PID为28157的线程造成的CPU占用过高。

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

jstack 25364 |grep -A 10 0x6dfd

获取如下结果:

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

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

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

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

相关标签: java从入门到放弃