性能優化思路及相關命令


一、上節回顧

上一節,我帶你一起梳理了常見的性能優化思路,先簡單回顧一下。我們可以從系統和應用程序兩個角度,來進行性能優化。

  1. 從系統的角度來說,主要是對 CPU、內存、網絡、磁盤 I/O 以及內核軟件資源等進行優化。
  2. 而從應用程序的角度來說,主要是簡化代碼、降低 CPU 使用、減少網絡請求和磁盤 I/O,並借助緩存、異步處理、多進程和多線程等,提高應用程序的吞吐能力。

性能優化最好逐步完善,動態進行。不要追求一步到位,而要首先保證能滿足當前的性能要求。

性能優化通常意味着復雜度的提升,也意味着可維護性的降低。

如果你發現單機的性能調優帶來過高復雜度,一定不要沉迷於單機的極限性能,而要從軟件架構的角度,以水平擴展的方法來提升性能。

工欲善其事,必先利其器。我們知道,在性能分析和優化時,借助合適的性能工具,可以讓整個過程事半功倍。你還記得有哪些常用的性能工具嗎?今天,我就帶你一起梳理一下常用的性能工具,以便你在需要時,可以迅速找到自己想要的。

二、性能工具速查

在梳理性能工具之前,首先給你提一個問題,那就是,在什么情況下,我們才需要去查找、挑選性能工具呢?你可以先自己想一下,再繼續下面的內容。

其實在我看來,只有當你想了解某個性能指標,卻不知道該怎么辦的時候,才會想到,“要是有一個性能工具速查表就好了”這個問題。如果已知一個性能工具可用,我們更多會去查看這個工
具的手冊,找出它的功能、用法以及注意事項。

關於工具手冊的查看,man 應該是我們最熟悉的方法,我在專欄中多次介紹過。實際上,除了man 之外,還有另外一個查詢命令手冊的方法,也就是 info。

info 可以理解為 man 的詳細版本,提供了諸如節點跳轉等更強大的功能。相對來說,man 的輸出比較簡潔,而 info 的輸出更詳細。所以,我們通常使用 man 來查詢工具的使用方法,只有在
man 的輸出不太好理解時,才會再去參考 info 文檔。

當然,我說過了,要查詢手冊,前提一定是已知哪個工具可用。如果你還不知道要用哪個工具,就要根據想了解的指標,去查找有哪些工具可用。這其中:

  1. 有些工具不需要額外安裝,就可以直接使用,比如內核的 /proc 文件系統;
  2. 而有些工具,則需要安裝額外的軟件包,比如 sar、pidstat、iostat 等。

所以,在選擇性能工具時,除了要考慮性能指標這個目的外,還要結合待分析的環境來綜合考慮。比如,實際環境是否允許安裝軟件包,是否需要新的內核版本等。

明白了工具選擇的基本原則后,我們來看 Linux 的性能工具。首先還是要推薦下面這張圖,也就是 Brendan Gregg 整理的性能工具譜圖。我在專欄中多次提到過,你肯定也已經參考過。

這張圖從 Linux 內核的各個子系統出發,匯總了對各個子系統進行性能分析時,你可以選擇的工具。不過,雖然這個圖是性能分析最好的參考資料之一,它其實還不夠具體。

比如,當你需要查看某個性能指標時,這張圖里對應的子系統部分,可能有多個性能工具可供選擇。但實際上,並非所有這些工具都適用,具體要用哪個,還需要你去查找每個工具的手冊,對
比分析做出選擇。

那么,有沒有更好的方法來理解這些工具呢? 我的建議,還是從性能指標出發,根據性能指標的不同,將性能工具划分為不同類型。比如,最常見的就是可以根據 CPU、內存、磁盤 I/O 以及網
絡的各類性能指標,將這些工具進行分類。

接下來,我就從 CPU、內存、磁盤 I/O 以及網絡等幾個角度,梳理這些常見的 Linux 性能工具,特別是從性能指標的角度出發,理清楚到底有哪些工具,可以用來監測特定的性能指標。這些工
具,實際上貫穿在我們專欄各模塊的各個案例中。為了方便你查看,我將它們都整理成了表格,並增加了每個工具的使用場景。

三、CPU 性能工具

首先,從 CPU 的角度來說,主要的性能指標就是 CPU 的使用率、上下文切換以及 CPU Cache 的命中率等。下面這張圖就列出了常見的 CPU 性能指標。

從這些指標出發,再把 CPU 使用率,划分為系統和進程兩個維度,我們就可以得到,下面這個CPU 性能工具速查表。注意,因為每種性能指標都可能對應多種工具,我在每個指標的說明中,
都幫你總結了這些工具的特點和注意事項。這些也是你需要特別關注的地方。

四、內存性能工具

接着我們來看內存方面。從內存的角度來說,主要的性能指標,就是系統內存的分配和使用、進程內存的分配和使用以及 SWAP 的用量。下面這張圖列出了常見的內存性能指標。

從這些指標出發,我們就可以得到如下表所示的內存性能工具速查表。同 CPU 性能工具一樣,這兒我也幫你梳理了,常見工具的特點和注意事項。

注:最后一行 pcstat 的源碼鏈接為 https://github.com/tobert/pcstat

五、磁盤 I/O 性能工具

接下來,從文件系統和磁盤 I/O 的角度來說,主要性能指標,就是文件系統的使用、緩存和緩沖區的使用,以及磁盤 I/O 的使用率、吞吐量和延遲等。下面這張圖列出了常見的 I/O 性能指標。

 

從這些指標出發,我們就可以得到,下面這個文件系統和磁盤 I/O 性能工具速查表。同 CPU 和內存性能工具一樣,我也梳理出了這些工具的特點和注意事項

六、網絡性能工具

最后,從網絡的角度來說,主要性能指標就是吞吐量、響應時間、連接數、丟包數等。根據TCP/IP 網絡協議棧的原理,我們可以把這些性能指標,進一步細化為每層協議的具體指標。這里
我同樣用一張圖,分別從鏈路層、網絡層、傳輸層和應用層,列出了各層的主要指標。

從這些指標出發,我們就可以得到下面的網絡性能工具速查表。同樣的,我也幫你梳理了各種工具的特點和注意事項。

七、基准測試工具

除了性能分析外,很多時候,我們還需要對系統性能進行基准測試。比如,

在文件系統和磁盤 I/O 模塊中,我們使用 fio 工具,測試了磁盤 I/O 的性能。在網絡模塊中,我們使用 iperf、pktgen 等,測試了網絡的性能。
而在很多基於 Nginx 的案例中,我們則使用 ab、wrk 等,測試 Nginx 應用的性能。

除了專欄里介紹過的這些工具外,對於 Linux 的各個子系統來說,還有很多其他的基准測試工具可能會用到。下面這張圖,是 Brendan Gregg 整理的 Linux 基准測試工具圖譜,你可以保存下
來,在需要時參考。

八、小結

今天,我們一起梳理了常見的性能工具,並從 CPU、內存、文件系統和磁盤 I/O、網絡以及基准測試等不同的角度,匯總了各類性能指標所對應的性能工具速查表。

當分析性能問題時,大的來說,主要有這么兩個步驟:

  1. 第一步,從性能瓶頸出發,根據系統和應用程序的運行原理,確認待分析的性能指標。
  2. 第二步,根據這些圖表,選出最合適的性能工具,然后了解並使用工具,從而更快觀測到需要的性能數據。

雖然 Linux 的性能指標和性能工具都比較多,但熟悉了各指標含義后,你自然就會發現這些工具同性能指標間的關聯。順着這個思路往下走,掌握這些工具的選用其實並不難。

當然,正如咱們專欄一直強調的,不要把性能工具當成性能分析和優化的全部。

  1. 一方面,性能分析和優化的核心,是對系統和應用程序運行原理的掌握,而性能工具只是輔助你更快完成這個過程的幫手。
  2. 另一方面,完善的監控系統,可以提供絕大部分性能分析所需的基准數據。從這些數據中,你很可能就能大致定位出性能瓶頸,也就不用再去手動執行各類工具了。
作者:羅阿紅 出處:http://www.cnblogs.com/luoahong/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM