cpu占用高如何排查


記錄一次線上服務器出現cpu占用過高,避免之后再次出現相關問題,這里記錄一下

 

用代碼模擬cpu 占用過高進行排查

 

新建一個web項目,這里以springboot為例子新建一個web項目

package com.wanjun.jvm;

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

@SpringBootApplication
@RestController
public class JvmApplication {

    public static void main(String[] args) {
        SpringApplication.run(JvmApplication.class, args);
    }
    //這里寫個死循環 模擬 cpu 占用
    @RequestMapping("/cpu")
     public String testCpu() { 
        System.out.println("request cpu");
        while (true) {
            
        }
     }
}

 

將項目部署到linux 服務器上

啟動項目

 

 

訪問
curl localhost:8080/cpu
 
排查
查看占用cpu高的進程 
top
如下圖:可看出PID為4060的java進程占用cpu最高,達到了99.5%

 

 

查看子進程情況:
top -p 4606 -H  

 

 

將 子進程id 轉換成16進制

printf "%x \n" 4648

 

 

 

 

 查詢具體出現問題的代碼位置
 jstack 4606|grep 1228 -C 30
 如下圖:可看出是JvmApplication類的第19行出現問題

 

 


免責聲明!

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



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