使用開源工具識別 Linux 的性能瓶頸
計算機是一個集成的系統,它的性能取決於最慢的硬體組件。如果一個組件的能力比其他組件差,性能落後而不能跟上,它就會拖累你的整個系統。這就是一個 性能瓶頸。消除一個嚴重的瓶頸可以使你的系統飛起來。
本文解釋了如何識別 Linux 系統中的硬體瓶頸。這些技術同時適用於個人的電腦和伺服器。我強調的是個人電腦 —— 我不會涉及區域網管理或資料庫系統等領域的伺服器特定的瓶頸。這些通常涉及專門的工具。
我也不會多談解決方案。這對本文來說是個太大的話題。相反,我將寫一篇關於性能調整的後續文章。
我將只使用開源的圖形用戶界面(GUI)工具來完成這項工作。大多數關於 Linux 瓶頸的文章都相當複雜。它們使用專門的命令,並深入研究神秘的細節。
開源提供的 GUI 工具使得識別許多瓶頸變得簡單。我的目標是給你一個快速、簡單的方法,你可以在任何地方使用。
從哪裡開始
一台計算機由六個關鍵的硬體資源組成。
- 處理器
- 內存
- 存儲器
- USB 埠
- 互聯網連接
- 圖形處理器
如果任何一個資源表現不佳,就會產生一個性能瓶頸。為了識別瓶頸,你必須監測這六種資源。
開源提供了大量的工具來完成這項工作。我會使用 GNOME 系統監視器。它的輸出很容易理解,而且你可以在大多數軟體庫中找到它。
啟動它並點擊「資源」標籤。你可以馬上發現許多性能問題。
![系統監控-資源面板](/data/attachment/album/202106/07/000221jxmk3g3s3smm4cm3.jpg "System Monitor - Resources Panel ")
圖 1. 系統監控器發現問題。(Howard Fosdick, CC BY-SA 4.0)
在「資源」面板上顯示三個部分:CPU 歷史、內存和交換歷史,以及網路歷史。一眼就能看出你的處理器是否不堪負荷了,還是你的電腦沒有內存了,抑或你的網路帶寬被用光了。
我將在下面探討這些問題。現在,當你的電腦速度變慢時,首先檢查系統監視器。它可以立即為你提供最常見的性能問題的線索。
現在讓我們來探討一下如何識別特定方面的瓶頸。
如何識別處理器的瓶頸
要發現瓶頸,你必須首先知道你有什麼硬體。開源為這個目的提供了幾個工具。我喜歡 HardInfo,因為它的屏幕顯示很容易閱讀,而且廣泛流行。
啟動 HardInfo。它的「計算機->摘要」面板可以識別你的 CPU 並告訴你它的核心數、線程數和速度。它還能識別你的主板和其他計算機部件。
![HardInfo Summary Panel](/data/attachment/album/202106/07/000221nn8i6fizy6b12ygf.jpg "HardInfo Summary Panel")
圖 2. HardInfo 顯示了硬體細節。(Howard Fosdick, CC BY-SA 4.0)
HardInfo 顯示,這台計算機有一個物理 CPU 晶元。該晶元包含兩個處理器(或稱為核心)。每個核心支持兩個線程(或稱為邏輯處理器)。這就是總共四個邏輯處理器 —— 正是圖 1 中系統監控器的 CPU 歷史部分所顯示的。
當處理器不能在其時間內對請求做出反應時,就會出現 處理器瓶頸,說明它們已經很忙了。
當系統監控器顯示邏輯處理器的利用率持續在 80% 或 90% 以上時,你就可以確定這一點。這裡有一個例子,四個邏輯處理器中有三個被淹沒在 100% 的利用率中。這是一個瓶頸,因為它沒有留下多少 CPU 用於其他工作。
![系統監視器的處理器瓶頸](/data/attachment/album/202106/07/000221f404ggmlxogiirg4.jpg "System Monitor processor bottleneck")
圖 3. 一個處理器的瓶頸。(Howard Fosdick, CC BY-SA 4.0)
哪個程序導致了這個問題?
你需要找出是哪個程序在消耗所有的 CPU。點擊系統監視器的「進程」標籤。然後點擊「CPU 百分比」標頭,根據它們消耗的 CPU 的多少對進程進行排序。你將看到哪些應用程序正在扼殺你的系統。
![系統監控進程面板](/data/attachment/album/202106/07/000222kf6kqzhfrn99b6d4.jpg "System Monitor Processes panel")
圖 4. 識別違規的進程。(Howard Fosdick, CC BY-SA 4.0)
前三個進程各消耗了 總 CPU 資源的 24%。由於有四個邏輯處理器,這意味著每個進程消耗了一整個處理器。這就像圖 3 所示。
在「進程」面板上,一個名為「analytical_AI」的程序被確定為罪魁禍首。你可以在面板上右鍵單擊它,以查看其資源消耗的更多細節,包括內存使用、它所打開的文件、其輸入/輸出細節,等等。
如果你的登錄會話有管理員許可權,你可以管理這個進程。你可以改變它的優先順序,並停止、繼續、結束或殺死它。因此,你可以在這裡立即解決你的瓶頸問題。
![系統監視器管理一個進程](/data/attachment/album/202106/07/000222qx0ie1m4xqnmxqqt.jpg "System Monitor managing a process")
圖 5. 右鍵點擊一個進程來管理它。(Howard Fosdick, CC BY-SA 4.0)
如何解決處理瓶頸問題?除了實時管理違規的進程外,你也可以防止瓶頸的發生。例如,你可以用另一個應用程序來代替違規進程,繞過它,改變你使用該應用程序的行為,將該應用程序安排在非工作時間,解決潛在的內存問題,對該應用程序或你的系統軟體進行性能調整,或升級你的硬體。這裡涉及的內容太多,所以我將在下一篇文章中探討這些方式。
常見的處理器瓶頸
在用系統監控器監控你的 CPU 時,你會遇到幾種常見的瓶頸問題。
有時一個邏輯處理器出現瓶頸,而其他所有的處理器都處於低利用率。這意味著你有一個應用程序,它的代碼不夠智能,無法利用一個以上的邏輯處理器,而且它已經把正在使用的那個處理器耗盡了。這個應用程序完成的時間將比使用更多的處理器要長。但另一方面,至少它能讓你的其他處理器騰出手來做別的工作,而不會接管你的電腦。
你也可能看到一個邏輯處理器永遠停留在 100% 的利用率。要麼它非常忙,要麼是一個進程被掛起了。判斷它是否被掛起的方法是,是看該進程是否從不進行任何磁碟活動(正如系統監視器「進程」面板所顯示的那樣)。
最後,你可能會注意到,當你所有的處理器都陷入瓶頸時,你的內存也被完全利用了。內存不足的情況有時會導致處理器瓶頸。在這種情況下,你要解決的是根本的內存問題,而不是體現出癥狀的 CPU 問題。
如何識別內存瓶頸
鑒於現代 PC 中有大量的內存,內存瓶頸比以前要少得多。然而,如果你運行內存密集型程序,特別是當你的計算機沒有很多的隨機存取內存(RAM)時,你仍然可能遇到這些問題。
Linux 使用內存 既用於程序,也用於緩存磁碟數據。後者加快了磁碟數據的訪問速度。Linux 可以在它需要的任何時候回收這些內存供程序使用。
系統監視器的「資源」面板顯示了你的總內存和它被使用的程度。在「進程」面板上,你可以看到單個進程的內存使用情況。
下面是系統監控器「資源」面板中跟蹤總內存使用的部分。
![系統監控器的內存瓶頸](/data/attachment/album/202106/07/000222srfbgie767ubzepe.jpg "System Monitor memory bottleneck")
圖 6. 一個內存瓶頸。(Howard Fosdick, CC BY-SA 4.0)
在「內存」的右邊,你會注意到 交換空間。這是 Linux 在內存不足時使用的磁碟空間。它將內存寫入磁碟以繼續操作,有效地將交換空間作為你的內存的一個較慢的擴展。
你要注意的兩個內存性能問題是:
- 內存被大量使用,而且你看到交換空間的活動頻繁或不斷增加。
- 內存和交換空間都被大量使用。
情況一意味著更慢的性能,因為交換空間總是比內存更慢。你是否認為這是一個性能問題,取決於許多因素(例如,你的交換空間有多活躍、它的速度、你的預期,等等)。我的看法是,對於現代個人電腦來說,交換空間任何超過象徵性的使用都是不可接受的。
情況二是指內存和交換空間都被大量使用。這是一個 內存瓶頸。計算機變得反應遲鈍。它甚至可能陷入一種「咆哮」的狀態,在這種狀態下,除了內存管理之外,它幾乎不能完成其他任務。
上面的圖 6 顯示了一台只有 2GB 內存的舊電腦。當內存使用量超過 80% 時,系統開始向交換空間寫入,響應速度下降了。這張截圖顯示了內存使用量超過了 90%,而且這台電腦已經無法使用。
解決內存問題的最終答案是要麼少用內存,要麼多買內存。我將在後續文章中討論解決方案。
如何識別存儲瓶頸
如今的存儲有固態和機械硬碟等多個品種。設備介面包括 PCIe、SATA、雷電和 USB。無論有哪種類型的存儲,你都要使用相同的程序來識別磁碟瓶頸。
從系統監視器開始。它的「進程」面板顯示各個進程的輸入/輸出率。因此,你可以快速識別哪些進程做了最多的磁碟 I/O。
但該工具並不顯示每個磁碟的總數據傳輸率。你需要查看特定磁碟上的總負載,以確定該磁碟是否是一個存儲瓶頸。
要做到這一點,使用 atop 命令。它在大多數 Linux 軟體庫中都有。
只要在命令行提示符下輸入 atop
即可。下面的輸出顯示,設備 sdb
達到 busy 101%
。很明顯,它已經達到了性能極限,限制了你的系統完成工作的速度。
![atop 磁碟瓶頸](/data/attachment/album/202106/07/000222u09eikev3pj90k3f.jpg "atop disk bottleneck")
圖 7. atop 命令識別了一個磁碟瓶頸。(Howard Fosdick, CC BY-SA 4.0)
注意到其中一個 CPU 有 85% 的時間在等待磁碟完成它的工作(cpu001 w 85%
)。這是典型的存儲設備成為瓶頸的情況。事實上,許多人首先看 CPU 的 I/O 等待時間來發現存儲瓶頸。
因此,要想輕鬆識別存儲瓶頸,請使用 atop
命令。然後使用系統監視器上的「進程」面板來識別導致瓶頸的各個進程。
如何識別 USB 埠的瓶頸
有些人整天都在使用他們的 USB 埠。然而,他們從不檢查這些埠是否被最佳地使用。無論你是插入外部磁碟、U 盤,還是其他東西,你都要確認你是否從 USB 連接的設備中獲得了最大性能。
這個圖表顯示了原因。潛在的 USB 數據傳輸率差異 很大。
![USB 標準](/data/attachment/album/202106/07/000223t6hlfzfr6sjflupm.jpg "USB standards")
圖 8. USB 速度變化很大。(Howard Fosdick,根據 Tripplite 和 Wikipedia 提供的數字,CC BY-SA 4.0)
HardInfo 的「USB 設備」標籤顯示了你的計算機支持的 USB 標準。大多數計算機提供不止一種速度。你怎麼知道一個特定埠的速度呢?供應商對它們進行顏色編碼,如圖表中所示。或者你可以在你的計算機的文檔中查找。
要看到你得到的實際速度,可以使用開源的 GNOME 磁碟 程序進行測試。只要啟動 GNOME 磁碟,選擇它的「磁碟基準」功能,然後運行一個基準測試。這將告訴你在一個埠插入特定設備時,你將得到的最大實際速度。
你可能會得到不同的埠傳輸速度,這取決於你將哪個設備插入它。數據速率取決於埠和設備的特定組合。
例如,一個可以以 3.1 速度運行的設備如果使用 2.0 埠就會以 2.0 的速度運行。(而且它不會告訴你它是以較慢的速度運行的!)相反,如果你把一個 USB 2.0 設備插入 3.1 埠,它能工作,但速度是 2.0 的速度。所以要獲得快速的 USB,你必須確保埠和設備都支持它。GNOME 磁碟為你提供了驗證這一點的方法。
要確定 USB 的處理瓶頸,使用你對固態和硬碟所做的同樣程序。運行 atop
命令來發現 USB 存儲瓶頸。然後,使用系統監視器來獲取違規進程的詳細信息。
如何識別互聯網帶寬瓶頸
系統監控器的「資源」面板會實時告訴你互聯網連接速度(見圖 1)。
有 很好的 Python 工具 可以測試你的最大網速,但你也可以在 Speedtest、Fast.com 和 Speakeasy 等網站進行測試。為了獲得最佳結果,關閉所有東西,只運行 速度測試;關閉你的虛擬私有網路;在一天中的不同時間運行測試;並比較幾個測試網站的結果。
然後將你的結果與你的供應商聲稱的下載和上傳速度進行比較。這樣,你就可以確認你得到的是你所付費的速度。
如果你有一個單獨的路由器,在有和沒有它的情況下進行測試。這可以告訴你,你的路由器是否是一個瓶頸。如果你使用 WiFi,在有 WiFi 和沒有 WiFi 的情況下進行測試(通過將你的筆記本電腦直接與數據機連接)。我經常看到人們抱怨他們的互聯網供應商,而實際上他們只是有一個 WiFi 瓶頸,可以自己解決。
如果某些程序正在消耗你的整個互聯網連接,你想知道是哪一個。通過使用 nethogs
命令找到它。它在大多數軟體庫中都有。
有一天,我的系統監視器突然顯示我的互聯網訪問量激增。我只是在命令行中輸入了 nethogs
,它立即確定帶寬消耗者是 Clamav 防病毒更新。
![Nethogs](/data/attachment/album/202106/07/000223v4ys9k6dhm5mjdmq.jpg "Nethogs")
圖 9. Nethogs 識別帶寬用戶。(Howard Fosdick, CC BY-SA 4.0)
如何識別圖形處理瓶頸
如果你把顯示器插在台式電腦後面的主板上,你就在使用 板載顯卡。如果你把它插在後面的卡上,你就有一個專門的圖形子系統。大多數人稱它為 視頻卡 或 顯卡。對於台式電腦來說,附加顯卡通常比主板上的顯卡更強大、更昂貴。筆記本電腦總是使用板載顯卡。
HardInfo 的「PCI 設備」面板告訴你關於你的圖形處理單元(GPU)。它還顯示你的專用視頻內存的數量(尋找標有「可預取」的內存)。
![視頻晶元組信息](/data/attachment/album/202106/07/000223vv84wgakk82wwekk.jpg "Video Chipset Information")
圖 10. HardInfo提供圖形處理信息。(Howard Fosdick, CC BY-SA 4.0)
CPU 和 GPU 非常密切地 一起工作。簡而言之,CPU 為 GPU 準備渲染的幀,然後 GPU 渲染這些幀。
當你的 CPU 在等待 100% 繁忙的 GPU 時,就會出現 GPU 瓶頸。
為了確定這一點,你需要監控 CPU 和 GPU 的利用率。像 Conky 和 Glances 這樣的開源監控器,如果它們的擴展插件支持你的圖形晶元組,就可以做到這一點。
看一下 Conky 的這個例子。你可以看到,這個系統有很多可用的 CPU。GPU 只有 25% 的使用率。想像一下,如果這個 GPU 的數量接近 100%。那麼你就會知道 CPU 在等待 GPU,你就會有一個 GPU 的瓶頸。
![Conky CPU 和 GPU 監控](/data/attachment/album/202106/07/000224l0ppz2nsni92l2ss.jpg "Conky CPU and GPU monitoring")
圖 11. Conky 顯示 CPU 和 GPU 的利用率。 (圖片來源:AskUbuntu論壇)
在某些系統上,你需要一個供應商專屬的工具來監控你的 GPU。它們可以從 GitHub 上下載,並在 GPU 監控和診斷命令行工具 這篇文章中有所描述。
總結
計算機由一系列集成的硬體資源組成。如果它們中的任何一個在工作量上遠遠落後於其他資源,就會產生性能瓶頸。這可能會拖累你的整個系統。你需要能夠識別和糾正瓶頸,以實現最佳性能。
不久前,識別瓶頸需要深厚的專業知識。今天的開源 GUI 性能監控器使它變得相當簡單。
在我的下一篇文章中,我將討論改善你的 Linux 電腦性能的具體方法。同時,請在評論中分享你自己的經驗。
via: https://opensource.com/article/21/3/linux-performance-bottlenecks
作者:Howard Fosdick 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive