Java服务CPU占用高问题定位方法

1. 概述

提供一种简单的方法来定位CPU高的问题。

  1. 找到CPU高的进程,比如232543;
  2. 执行top -H -p pid,找到占用CPU最高的线程号,比如232544,转换成16进制38c60;
  3. 执行jstack 232543 > 232543.log用来dump出目前代码栈;
  4. 从232543.log中根据线程号38c60查找其中的线程相应的代码栈,则可快速定位相应的业务代码;

2. 步骤

2.0 模拟CPU占用的例子

public class Cpu {

    public static void main(String[] args) throws InterruptedException {
        int busyTime = 10;  
        int idleTime = busyTime;  
          
        while(true){  
            long startTime = System.currentTimeMillis();  
            //busy loop:  
            while((System.currentTimeMillis()-startTime)<=busyTime)  
                ;  
            Thread.sleep(idleTime);  
        }  
    }

}

直接编译运行,CPU就会有大约50%的占用。

  

2.1 找到占用CPU高的进程

执行top命令,找到CPU高的进程232543

2.2 执行top -H -p pid,找到占用CPU最高的线程号232544,转换成16进制38c60

2.3 执行jstack 232543 > 232543.log用来dump出目前代码栈

2.4 从232543.log中根据线程号38c60查找其中的线程相应的代码栈,则可快速定位相应的业务代码

posted @ 2018-04-21 10:18  小路不懂2  阅读(1341)  评论(0编辑  收藏  举报