[轉帖]CPU性能優化基本篇:一定要了解Linux CPU哪些基本概念

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親和性綁定、編譯器優化 …

 

大家有什麼想了解和疑問,歡迎下面給我留言。謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章