性能優化文章參考倪朋飛老師的Linux性能優化實戰課程
性能優化方法論
Q:怎么評估性能優化的效果?
A:對系統的性能指標進行量化,并且要分別測試出優化前、后的性能指標,用前后指標的變化來對比呈現效果
。確定性能的量化指標;測試優化前的性能指標;測試優化后的性能指標
Q:多個性能問題同時存在,要怎么選擇?
A:不是所有的性能問題都值得優化,找出最重要的、可以最大程度提升性能的問題
Q:有多種優化方法時,要如何選擇?
A:性能優化通常會帶來復雜度的提升,降低程序的可維護性,還可能在優化一個指標時,引發其他指標的異常;切記,不要想著“一步登天”,試圖一次性解決所有問題;也不要只會“拿來主義”,把其他應用的優化方法原封不動拿來用,卻不經過任何思考和分析
CPU優化
- 應用程序優化
- 編譯器優化
- 算法優化
- 異步處理
- 多線程
- 緩存
- 系統優化
- CPU綁定:把進程綁定到一個或者多個 CPU 上,可以提高 CPU 緩存的命中率,減少跨 CPU 調度帶來的上下文切換問題
- CPU獨占:跟 CPU 綁定類似,進一步將 CPU 分組,并通過 CPU 親和性機制為其分配進程。這樣,這些 CPU 就由指定的進程獨占,換句話說,不允許其他進程再來使用這些 CPU
- 優先級調整:使用 nice 調整進程的優先級,正值調低優先級,負值調高優先級。優先級的數值含義前面我們提到過,忘了的話及時復習一下。在這里,適當降低非核心應用的優先級,增高核心應用的優先級,可以確保核心應用得到優先處理。
- 為進程設置資源限制:使用 Linux cgroups 來設置進程的 CPU 使用上限,可以防止由于某個應用自身的問題,而耗盡系統資源。
- NUMA(Non-Uniform Memory Access)優化:支持 NUMA 的處理器會被劃分為多個 node,每個 node 都有自己的本地內存空間。NUMA 優化,其實就是讓 CPU 盡可能只訪問本地內存。
- 中斷負載均衡:無論是軟中斷還是硬中斷,它們的中斷處理程序都可能會耗費大量的 CPU。開啟 irqbalance 服務或者配置 smp_affinity,就可以把中斷處理過程自動負載均衡到多個 CPU 上。
# 查看系統平均負載
watch -d uptime
# 查看系統CPU情況
mpstat -P ALL 1
# 查看進程CPU使用情況
pidstat -u 1
# 查看上下文切換
vmstat 1 10