天天看點

jvm如何排查生産環境cpu飙高的問題

jvm如何排查生産環境cpu飙高的問題

文章目錄

  • ​​一、生産環境 cpu 飙高産生的原因?​​
  • ​​1. CAS 自旋沒有控制自旋次數​​
  • ​​2. 死循環​​
  • ​​3. 阿裡雲 Redis 被注入挖礦程式​​
  • ​​4. 伺服器被 DDOS 工具攻擊​​
  • ​​二、windows環境下如何排查cpu飙高問題​​
  • ​​2.1. 任務管理器​​
  • ​​2.2. jvisualvm​​
  • ​​三、環境下如何排查cpu飙高問題​​
  • ​​3.1. 監控指令​​
  • ​​3.2. 使用 arthas​​
  • ​​3.3. 伺服器監控系統​​
  • ​​3.4. 第三方監控軟體​​
  • ​​四、linux環境下cpu飙高實戰​​
  • ​​4.1. cpu飙高測試類​​
  • ​​4.2. 上傳測試類​​
  • ​​4.3. 編譯測試類​​
  • ​​4.4. 執行測試類​​
  • ​​4.5. 使用arthas排查cpu飙高問題​​
一、生産環境 cpu 飙高産生的原因?

1. CAS 自旋沒有控制自旋次數

解決方案:設定固定自旋次數

2. 死循環

解決方案: 全面考慮業務場景。設定退出标志條件。限制循環的次數

3. 阿裡雲 Redis 被注入挖礦程式

解決方案:Redis 端口不要能夠被外網通路;

4. 伺服器被 DDOS 工具攻擊

解決方案:通過限流、ip 黑名單、圖形驗證碼防止機器模拟攻擊

二、windows環境下如何排查cpu飙高問題

2.1. 任務管理器

win作業系統,打開任務管理器,檢視哪個進行占用cpu比較高

jvm如何排查生産環境cpu飙高的問題

2.2. jvisualvm

使用jvisualvm.exe排查cpu标高問題

jvm如何排查生産環境cpu飙高的問題
jvm如何排查生産環境cpu飙高的問題
jvm如何排查生産環境cpu飙高的問題
三、環境下如何排查cpu飙高問題

3.1. 監控指令

linux作業系統,檢視程序占用cpu标高,使用

top      
jvm如何排查生産環境cpu飙高的問題

3.2. 使用 arthas

先找到伺服器jvm運作的程序清單,然後,選擇監控的指定jvm程序,最後,找出此程序中線程cpu占比前三的線程資訊。

jvm如何排查生産環境cpu飙高的問題

3.3. 伺服器監控系統

比如說:阿裡雲或者騰訊雲 CPU飙高,門檻值70%~85% --發送告警郵件

伺服器叢集化,每一台伺服器都會監控 --發送告警郵件

運維人員先知道那台伺服器節點cpu飙高,例如:192.100.100.100 cpu飙高75%,通知開發負責人配合排查該伺服器進行中哪一個線程導緻cpu飙高。

3.4. 第三方監控軟體

大的公司第三方監控軟體,通過平台查詢bpm+(xxx平台現有監控)

四、linux環境下cpu飙高實戰

4.1. cpu飙高測試類

public class Java04 {

    public static void main(String[] args) {
        new Thread(()->{
            while (true){
                System.out.println("1111111");
            }
        },"錄單-thread").start();
    }
}      

4.2. 上傳測試類

jvm如何排查生産環境cpu飙高的問題

4.3. 編譯測試類

javac Java04.java      

4.4. 執行測試類

java Java04      

4.5. 使用arthas排查cpu飙高問題