飞道的博客

【实战技能】超详细解决CPU占用过高的问题的办法

317人阅读  评论(0)

1、代码模拟

import java.util.Random;

public class HighCPUDemo {
   
    public static void main(String[] args) {
   
        while (true){
   
            System.out.println(new Random(999999));
        }
    }
}

2 、top命令找出cpu占用最高的进程

如下图 看到java的进程id为7495

3、ps -ef 或者 jps进一步定位,得知具体的程序

命令:ps -ef|grep java|grep -v grep


的到进程编号7495

4、定位到具体线程或者代码

命令:

ps -mp 进程号 -o THREAD,tid,time

其中

  • -m 显示所有的线程
  • -p pid进程使用cpu的时间
  • -o 该参数后是用户自定义格式

我们输入

ps -mp 7495 -o THREAD,tid,time

我们看到7495用了41.2%,但是线程id为7496确用了41.0%,那么它就是有问题的,如下图:

5、将需要的线程ID转换为16进制格式(英文小写字母)

方式1

刚才第四步得到有问题的线程id就是7496

printf “%x\n”  7496

方式2

找到计算器,点击查看

然后选择程序员

然后输入7496 在点击十六进制自动转换,我们自己转换成小写1d48

6.jstack 定位具体的代码

jstack 进程ID |grep tid(16进制线程ID小写英文) -A20

-A20 表示打印出前20行

我们输入:

jstack 7495 |grep 1d48  -A20


发现第六行代码出错了,然后看我们的程序,果然第6行出错了


转载:https://blog.csdn.net/jerry11112/article/details/114678330
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场