1. 程式人生 > >《Linux 性能及調優指南》3.2 CPU瓶頸

《Linux 性能及調優指南》3.2 CPU瓶頸

同時 聲明 提升 init other kde 工作 註釋 ice

翻譯:飛哥 ( http://hi.baidu.com/imlidapeng )

版權所有,尊重他人勞動成果,轉載時請註明作者和原始出處及本聲明。

原文名稱:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------
?

對服務器來說主要的角色就是應用服務器或數據庫服務器,CPU作為關鍵資源經常成為性能瓶頸的根源。
?CPU使用率高並不總是意味著CPU工作繁忙,它有可能是正在等待其他子系統。
?在進行性能分析時,將所有子系統當做一個整體來看是非常重要的,因為在子系統中可能會出現瀑布效應。
?

註釋:有種常見的錯誤觀念認為CPU是服務器中最重要的。
?情況不總是這樣,服務器經常是CPU的配置高,硬盤、內存和網絡子系統是低配置。
?只有一些特定對CPU要求高的應用程序才能真正充分利用當今的高端處理器。


?3.2.1 發現CPU瓶頸

有多種方法可以來確認CPU瓶頸。
?在第二章“監控和基準工具”中介紹到,Linux有很多工具幫助我們確認瓶頸,問題是使用哪一個。
?其中一個工具是uptime。
?
?通過分析uptime輸出,我能對在過去15分鐘所發生的事情有個粗略的了解。關於此工具的更多說明,參見2.3.3“uptime”。


?例子3-1:一個系統CPU資源緊張的uptime輸出結果
----------------------------------------------------------------------------------------
18:03:16 up 1 day, 2:46, 6 users, load average: 182.53, 92.02, 37.95
----------------------------------------------------------------------------------------

使用KDE System Guard和CPU傳感器可以讓你了解當前CPU的工作負載。

提示:小心不要因為同時運行過多的工具而導致CPU問題。你可能發現當同時使用多個不同監控工具時會使CPU負載過高。


?使用top,你可以看到CPU使用率及主要是哪些進程引起問題(例子2-1)。
?如果你已安裝sar,搜集了包括CPU使用率的信息。
?但分析這些信息是很困難的,所以要使用isag,它可以將sar的輸出轉換成圖形。
?否則你可以通過腳本解析這些信息並使用電子表格繪制CPU使用率的趨勢圖。
?你也可以在命令行中輸入sar -u或者sar -U processornumber。
?要獲得比單單CPU子系統更多關於系統及當前使用率的信息,一個不錯的工具就是vmstat(參見2.3.2,“vmstat”)


?3.2.2 SMP

基於SMP的系統會出現其特有且難於檢測的問題。在SMP環境中,有個叫CPU親和力【affinity】的概念,它允許你將一個進程綁定到指定的CPU。

主要用途是這有利於CPU cache的優化,它通過讓進程在同一CPU運行代替在處理器間移動來實現。
?當進程在CPU間移動時,新CPU的cache會被清空。
?因此一個進程在處理器間移動會發生多次cache清空,這意味著一個單獨的進程會花費更多的時間才能完成。
?這種情況非常難於發現,因為在監控時CPU負載可能非常均衡,不一定會出現某個CPU達到峰值的情況。
?親和力在基於NUMA的系統中也很有用如IBM System x 3950,where it is important to keep memory, cache, and CPU access local to one another.


?3.2.3 性能調校選項

首先要確認系統性能問題是由CPU導致的而不是其他子系統。
?如果處理器為服務器瓶頸,可以通過相應調整來改善性能,
?這包括:

? 使用ps -ef命令確保沒有不必要的程序在後臺運行。如果發現有不必要的程序,將其停止並使用cron將其安排在非高峰期運行。

? 通過使用top命令找出非關鍵性且消耗CPU較多的進程,並使用renice命令修改它們的優先級。

? 在基於SMP的機器中,嘗試使用taskset將進程綁定到指定的CPU,確保進程不需要在處理器間忙碌,從而導致多次cache清空。

? 對於正在運行的應用程序,最好的辦法是縱向升級(提升CPU頻率)而不是橫向升級(增加CPU數量)。
? 這取決於你的應用程序是否能使用到多個處理器。例如一個單線程應用程序的升級方式最好是更換成更快的CPU而不是增加為多個CPU。

? 通常的做法還包括確認你所使用的是最新的驅動程序和韌體,因為這會影響CPU的負載。

《Linux 性能及調優指南》3.2 CPU瓶頸