線上服務器CPU占用率高如何排查定位


環境

centos7 1核2GB

Java8

 

模擬cpu占用高

新建一個名為jvm-learn的springboot項目

模擬代碼如下

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class JvmLearnApplication {

    public static void main(String[] args) {
        SpringApplication.run(JvmLearnApplication.class, args);
    }

    @GetMapping("cpu")
    public void cpu() {
        while (true) {

        }
    }

}

 

打包

在項目根目錄下執行如下命令:

mvn clean package -Dmaven.test.skip=true

 

啟動jar包

nohup java -jar jvm-learn-0.0.1-SNAPSHOT.jar &

 

訪問

curl localhost:8080/cpu

 

排查

查看占用cpu高的進程 

top

如下圖:可看出PID為7149的java進程占用cpu最高,達到了98%

 

 查看進程中最耗cpu的子線程

top -Hp 7149

如下圖:可看出PID為7166的線程占用cpu最高,達到了97.7%

 

將最耗cpu的線程id轉換為16進制輸出

 printf "%x \n" 7166

 

 

 查詢具體出現問題的代碼位置

jstack 7149 | grep 1bfe -A 30

 如下圖:可看出是JVMLearnApplication類的第18行出現問題

 

 轉:https://www.cnblogs.com/zuidongfeng/p/10019262.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM