Linux性能優化實戰學習筆記:第五十七講

1、上節回顧

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

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

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

性能優化一般意味着複雜度的提高,也意味着可維護性的下降。github

若是你發現單機的性能調優帶來太高複雜度,必定不要沉迷於單機的極限性能,而要從軟件架構的角度,以水平擴展的方法來提高性能。緩存

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

2、性能工具速查

在梳理性能工具以前,首先給你提一個問題,那就是,在什麼狀況下,咱們才須要去查找、挑選性能工具呢?你能夠先本身想一下,再繼續下面的內容。網絡

其實在我看來,只有當你想了解某個性能指標,殊不知道該怎麼辦的時候,纔會想到,「要是有一個性能工具速查表就行了」這個問題。若是已知一個性能工具可用,咱們更多會去查看這個工
具的手冊,找出它的功能、用法以及注意事項。多線程

關於工具手冊的查看,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 性能工具,特別是從性能指標的角度出發,理清楚到底有哪些工具,能夠用來監測特定的性能指標。這些工
具,實際上貫穿在咱們專欄各模塊的各個案例中。爲了方便你查看,我將它們都整理成了表格,並增長了每一個工具的使用場景。

3、CPU 性能工具

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

從這些指標出發,再把 CPU 使用率,劃分爲系統和進程兩個維度,咱們就能夠獲得,下面這個CPU 性能工具速查表。注意,由於每種性能指標均可能對應多種工具,我在每一個指標的說明中,
都幫你總結了這些工具的特色和注意事項。這些也是你須要特別關注的地方。

4、內存性能工具

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

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

注:最後一行 pcstat 的源碼連接爲 https://github.com/tobert/pcstat

5、磁盤 I/O 性能工具

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

 

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

6、網絡性能工具

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

從這些指標出發,咱們就能夠獲得下面的網絡性能工具速查表。一樣的,我也幫你梳理了各類工具的特色和注意事項。

7、基準測試工具

除了性能分析外,不少時候,咱們還須要對系統性能進行基準測試。好比,

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

除了專欄裏介紹過的這些工具外,對於 Linux 的各個子系統來講,還有不少其餘的基準測試工具可能會用到。下面這張圖,是 Brendan Gregg 整理的 Linux 基準測試工具圖譜,你能夠保存下
來,在須要時參考。

8、小結

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

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

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

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

固然,正如我們專欄一直強調的,不要把性能工具當成性能分析和優化的所有。

  1. 一方面,性能分析和優化的核心,是對系統和應用程序運行原理的掌握,而性能工具只是輔助你更快完成這個過程的幫手。
  2. 另外一方面,完善的監控系統,能夠提供絕大部分性能分析所需的基準數據。從這些數據中,你極可能就能大體定位出性能瓶頸,也就不用再去手動執行各種工具了。
相關文章
相關標籤/搜索