centos7-java模擬cpu佔用高及排查

環境

centos7 1核2GBjava

Java8web

 

模擬cpu佔用高

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

模擬代碼以下spring

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) {

        }
    }

}

 

打包

在項目根目錄下執行以下命令:centos

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%springboot

 

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

top -p 7149 -H

以下圖:可看出PID爲7166的線程佔用cpu最高,達到了97.7%app

 

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

 printf "%x \n" 7166

 

 

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

jstack 7149 | grep 1bfe -A 30

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

相關文章
相關標籤/搜索