https://heapdump.cn/monographic/detail/20/4103469
目錄
第一篇:CPU效能最佳化基礎篇:一定要了解Linux CPU哪些基本概念
第二篇:CPU 最佳化高階篇:Linux系統中CPU佔用率較高問題排查思路與解決方法
第三篇:CPU 最佳化高階篇:Java CPU 高的原因和排查方法 :如何定位Java 消耗CPU最多的執行緒
第四篇:CPU 最佳化高階篇:Java CPU 高的原因和排查方法 :學會Java死鎖和CPU 100% 問題的排查技巧
第五篇:CPU 最佳化線上實戰篇:Java 生產環境 CPU 跑滿 & 大量長耗時的問題排查 & 解決
第六篇:CPU 最佳化線上實戰篇:Java JVM 頻繁 GC的原因和排查方法
導語
實際專案中,我們常常遇到一些CPU高的問題,本次專題由淺入深,從基本概念到線上實踐,帶著大家重新系統學習一些Linux CPU,Java CPU調優 基本知識和方法。本文適合物件
- 中高階Java工程師:重溫Linux CPU常見的基本概念,比如Load。學習線上CPU最佳化和排查思路
- 架構師:線上CPU最佳化和排查案例分享
正文
進入正題:
典型的救火場景
Java程序CPU使用率很高Jstack、Btrace、Arthas分析堆疊Mysqld程序CPU使用率很高show full processlist 分析慢查詢,看連線數和QPS等面向底層基礎軟體系統的開發者直接定位函式程式碼,perf(文字) + flamegraph(火焰圖)
常見的疑問
load值多少算高呢?load值超過CPU核數都代表CPU繁忙負載比較重了,也要看趨勢上下文切換多少算高? 這個取決於CPU自身的效能。幾百到幾千都正常,暴增那種就需要警惕什麼會導致過多的上下文切換?執行佇列多少算正常?過多的程序/執行緒、中斷、系統呼叫等。每個CPU core不超過3個執行緒 Java應用CPU使用率很高通常是什麼原因?死迴圈、資料結構與演算法(複雜度高)、複雜的正則匹配、 頻繁GC(us高)、鎖競爭激烈(sy高)、執行緒主動切換頻繁等
小結
平均負載高,可能是CPU密集型應用程序導致 平均負載高並不代表CPU使用率高,也有可能I/O繁忙 通常,I/O密集型應用可能導致平均負載高但是CPU使用率不高 iowait高可能導致load高 ,可能存在頻繁寫入或I/O瓶頸,結合iostat分析 核心態CPU高,應該優先排查核心執行緒和系統呼叫情況(strace) 計算密集型場景CPU us/sy比至少90/10,I/O密集型約70/30(僅供參考) CPU快取命中率也很重要,可以透過perf stat -e 看到 USE方法:使用率(繁忙情況)、飽和度(可執行佇列等待CPU)、錯誤 調優:靜態/動態優先順序、排程器、程序CPU親和性繫結、編譯器最佳化 …
大家有什麼想了解和疑問,歡迎下面給我留言。謝謝!