上一節,我帶你一塊兒梳理了常見的性能優化思路,先簡單回顧一下。咱們能夠從系統和應用程序兩個角度,來進行性能優化。ios
性能優化最好逐步完善,動態進行。不要追求一步到位,而要首先保證能知足當前的性能要求。git
性能優化一般意味着複雜度的提高,也意味着可維護性的下降。github
若是你發現單機的性能調優帶來太高複雜度,必定不要沉迷於單機的極限性能,而要從軟件架構的角度,以水平擴展的方法來提高性能。緩存
工欲善其事,必先利其器。咱們知道,在性能分析和優化時,藉助合適的性能工具,可讓整個過程事半功倍。你還記得有哪些經常使用的性能工具嗎?今天,我就帶你一塊兒梳理一下經常使用的性能工具,以便你在須要時,能夠迅速找到本身想要的。性能優化
在梳理性能工具以前,首先給你提一個問題,那就是,在什麼狀況下,咱們才須要去查找、挑選性能工具呢?你能夠先本身想一下,再繼續下面的內容。網絡
其實在我看來,只有當你想了解某個性能指標,殊不知道該怎麼辦的時候,纔會想到,「要是有一個性能工具速查表就行了」這個問題。若是已知一個性能工具可用,咱們更多會去查看這個工
具的手冊,找出它的功能、用法以及注意事項。多線程
關於工具手冊的查看,man 應該是咱們最熟悉的方法,我在專欄中屢次介紹過。實際上,除了man 以外,還有另一個查詢命令手冊的方法,也就是 info。架構
info 能夠理解爲 man 的詳細版本,提供了諸如節點跳轉等更強大的功能。相對來講,man 的輸出比較簡潔,而 info 的輸出更詳細。因此,咱們一般使用 man 來查詢工具的使用方法,只有在
man 的輸出不太好理解時,纔會再去參考 info 文檔。異步
固然,我說過了,要查詢手冊,前提必定是已知哪一個工具可用。若是你還不知道要用哪一個工具,就要根據想了解的指標,去查找有哪些工具可用。這其中:工具
因此,在選擇性能工具時,除了要考慮性能指標這個目的外,還要結合待分析的環境來綜合考慮。好比,實際環境是否容許安裝軟件包,是否須要新的內核版本等。
明白了工具選擇的基本原則後,咱們來看 Linux 的性能工具。首先仍是要推薦下面這張圖,也就是 Brendan Gregg 整理的性能工具譜圖。我在專欄中屢次提到過,你確定也已經參考過。
這張圖從 Linux 內核的各個子系統出發,彙總了對各個子系統進行性能分析時,你能夠選擇的工具。不過,雖然這個圖是性能分析最好的參考資料之一,它其實還不夠具體。
好比,當你須要查看某個性能指標時,這張圖裏對應的子系統部分,可能有多個性能工具可供選擇。但實際上,並不是全部這些工具都適用,具體要用哪一個,還須要你去查找每一個工具的手冊,對
比分析作出選擇。
那麼,有沒有更好的方法來理解這些工具呢? 個人建議,仍是從性能指標出發,根據性能指標的不一樣,將性能工具劃分爲不一樣類型。好比,最多見的就是能夠根據 CPU、內存、磁盤 I/O 以及網
絡的各種性能指標,將這些工具進行分類。
接下來,我就從 CPU、內存、磁盤 I/O 以及網絡等幾個角度,梳理這些常見的 Linux 性能工具,特別是從性能指標的角度出發,理清楚到底有哪些工具,能夠用來監測特定的性能指標。這些工
具,實際上貫穿在咱們專欄各模塊的各個案例中。爲了方便你查看,我將它們都整理成了表格,並增長了每一個工具的使用場景。
首先,從 CPU 的角度來講,主要的性能指標就是 CPU 的使用率、上下文切換以及 CPU Cache 的命中率等。下面這張圖就列出了常見的 CPU 性能指標。
從這些指標出發,再把 CPU 使用率,劃分爲系統和進程兩個維度,咱們就能夠獲得,下面這個CPU 性能工具速查表。注意,由於每種性能指標均可能對應多種工具,我在每一個指標的說明中,
都幫你總結了這些工具的特色和注意事項。這些也是你須要特別關注的地方。
接着咱們來看內存方面。從內存的角度來講,主要的性能指標,就是系統內存的分配和使用、進程內存的分配和使用以及 SWAP 的用量。下面這張圖列出了常見的內存性能指標。
從這些指標出發,咱們就能夠獲得以下表所示的內存性能工具速查表。同 CPU 性能工具同樣,這兒我也幫你梳理了,常見工具的特色和注意事項。
注:最後一行 pcstat 的源碼連接爲 https://github.com/tobert/pcstat
接下來,從文件系統和磁盤 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、網絡以及基準測試等不一樣的角度,彙總了各種性能指標所對應的性能工具速查表。
當分析性能問題時,大的來講,主要有這麼兩個步驟:
雖然 Linux 的性能指標和性能工具都比較多,但熟悉了各指標含義後,你天然就會發現這些工具同性能指標間的關聯。順着這個思路往下走,掌握這些工具的選用其實並不難。
固然,正如我們專欄一直強調的,不要把性能工具當成性能分析和優化的所有。