CPU消耗過高的問題


一、現象:

壓測過程中,發現應用服務器的CPU使用率比較高(>80%或者>90%)

一般分為兩種情況:

1、接口的性能非常好,比如響應時間<10ms,tps很高,此事CPU使用率高是正常的,不需要優化

2、接口性能不好,比如響應時間>200ms,tps很低,此時考慮優化

 

二、找到占用CPU比較高的線程

方法一:

1、輸入top命令,找到占用CPU最高的進程號

2、輸入命令:top -p pid

 3、按H,出現進程的線程,默認按照CPU從高到低排序

 4、把線程pid轉換成十六進制,根據轉換的十六進制去dump文件中找到對應nid的線程號,對代碼進行分析

printf "%x\n" 1512:把十進制的1512轉換成十六進制

 總結:該方法適用於有固定的一個或幾個線程占用CPU比較高

 

 二、jprofiler分析:

1、在windows(本機)上安裝jprofiler客戶端

 

 windows安裝步驟:雙擊-下一步(略)

2、生成客戶端秘鑰:雙擊KeyGen.exe-->點擊Generate

 

3、Linux應用服務器上安裝jprofiler服務端

3.1 將jprofiler_linux_11_0.rpm上傳至linux服務器上,並添加可執行權限

 3.2 執行命令rpm -ivh jprofiler_linux_11_0.rpm安裝jprofiler,默認安裝在/opt/jprofiler11目錄下

 3.3 在tomcat/bin/catalina.sh文件配置jvm參數的地方添加

  -agentpath:/opt/jprofiler11/bin/linux-x64/libjprofilerti.so=port=8849,nowait

 4、jprofiler使用步驟

4.1 雙擊JProfiler客戶端-->StartCenter-->NewSession-->New Remote Integration

 4.2 選擇監控的系統,點擊Next

 4.3 選擇JVM版本信息:

 4.4 選擇是否等待jprofiler界面

  4.5 配置監控系統的ip

 4.6 配置jprofiler的目錄

  4.7 配置jprofiler的端口號

 4.8 Next-->Finish

 

 

 4.9 選擇模式

 

 

 5、點擊Detach,斷開連接

 6、點擊StartCenter,選擇之前建立的連接,再次監控

 7、點擊CPU views-->點擊Hot Spots-->點擊record CPU,即可查看哪個類下的哪個函數占用CPU時間較長

 

 

 三、CPU消耗過高可能的原因:

1、使用了復雜的算法,比如加密、解密

2、壓縮、解壓、序列化等操作

3、代碼中有Bug,比如死循環

 


免責聲明!

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



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