服務器負載過高分析


一、問題現象

  top 命令查看顯示服務器負載情況,服務器負載1.31,而且長時間沒降下去,CPU使用率99.9%也異常飈高

  

    load average :系統平均負載均值,三列分別代表 1分鍾、5分鍾、15分鍾。理論上,值越小越好。負載越高,說明可能跑的程序出現異常情況。

          一般,如果只是 1 分鍾內的負載比較高,其他兩個負載參數較低, 這說明是暫時現象,問題不大。如果5分鍾、15分鍾負載都超過 1 的話,那就要考慮程序方面的問題了。

  CPU使用率:有 10 個開發任務,4名開發人員,但是 10個任務都分配給一個人了,那么此時的CPU使用率為 25%,負載非常高。

  CPU平均負載:負載就是cpu在一段時間內正在處理以及等待cpu處理的進程數之和的統計信息,也就是cpu使用隊列的長度統計信息,這個數字越小越好(如果超過CPU核心*0.7就是不正常)。

        高速入口,系統負載為0,此時沒車,收費員閑着。負載0.5,一半的車流了,收費員比較閑。負載1,滿負荷,沒時間歇着了。負載1.5,車隊已經排到500米開外了,沒得歇。負載越高,過站時間越長。

二、查看分析

1、磁盤空間  df -l ,空余足,無問題

  

 2、內存使用情況  free ,剩余充足

  

 3、服務流量問題,由於是本地測試程序,無外部突發的高並發訪問,排除。

 4、JVM內存情況 

  4.1、 jmap -heap PID,無GC異常

  

   4.2、GC實時執行情況  jstat -gc PID 5000 ,每五秒輸出一次GC情況。無頻繁FGC情況,排除。

  

    S0C / S1C:年輕代 Survivor 區容量

    S0U / S1U:年輕代 Survivor 區使用量

    EC / EU :年輕代 Eden 區容量 / 使用量

    OC / OU :Old老年代容量 / 使用量

      MC / MU :Metaspace 元空間初始大小 / 使用量

      YGC / YGCT :程序啟動到采樣時的年輕代GC次數 /  耗時

      FGC / FGCT:程序啟動到采樣時的老年代GC次數 /  耗時

 5、查看運行中的Java程序進程

  5.1、查看異常CPU使用率進程

  

  5.1、導出異常飈高的PID對應的線程快照信息, jstack -l PID > /opt/apps/12001/12001.stack 
  5.2、查看對應進程中哪個線程占用異常過高, top -H -p PID 

  

   5.3、對應線程PID十進制轉為十六進制, printf "%x\n" PID 

  

   5.4、下載 5.1 中的快照文件到本地,或者直接查找文件內容  grep -C20 6f8 12001.stack 

  

   5.5、根據對應信息,去程序中查看,這里使用的是本地測試程序,線程一直RUNNABLE,程序中while無限循環,即為問題所在。

  

 6、CPU使用率低負載高

  原因:等待磁盤I/O完成的進程過多,導致進程隊列長度過大,但是CPU運行的進程卻很少,這樣就體現到負載過大了,CPU使用率低。


免責聲明!

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



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