
文章目錄
- 一、生産環境 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比較高
2.2. jvisualvm
使用jvisualvm.exe排查cpu标高問題

三、環境下如何排查cpu飙高問題
3.1. 監控指令
linux作業系統,檢視程序占用cpu标高,使用
top
3.2. 使用 arthas
先找到伺服器jvm運作的程序清單,然後,選擇監控的指定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. 上傳測試類
4.3. 編譯測試類
javac Java04.java
4.4. 執行測試類
java Java04
4.5. 使用arthas排查cpu飙高問題