Linux中國

使用開源工具識別 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 在內存不足時使用的磁碟空間。它將內存寫入磁碟以繼續操作,有效地將交換空間作為你的內存的一個較慢的擴展。

你要注意的兩個內存性能問題是:

  1. 內存被大量使用,而且你看到交換空間的活動頻繁或不斷增加。
  2. 內存和交換空間都被大量使用。

情況一意味著更慢的性能,因為交換空間總是比內存更慢。你是否認為這是一個性能問題,取決於許多因素(例如,你的交換空間有多活躍、它的速度、你的預期,等等)。我的看法是,對於現代個人電腦來說,交換空間任何超過象徵性的使用都是不可接受的。

情況二是指內存和交換空間都被大量使用。這是一個 內存瓶頸。計算機變得反應遲鈍。它甚至可能陷入一種「咆哮」的狀態,在這種狀態下,除了內存管理之外,它幾乎不能完成其他任務。

上面的圖 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,根據 TrippliteWikipedia 提供的數字,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 工具 可以測試你的最大網速,但你也可以在 SpeedtestFast.comSpeakeasy 等網站進行測試。為了獲得最佳結果,關閉所有東西,只運行 速度測試;關閉你的虛擬私有網路;在一天中的不同時間運行測試;並比較幾個測試網站的結果。

然後將你的結果與你的供應商聲稱的下載和上傳速度進行比較。這樣,你就可以確認你得到的是你所付費的速度。

如果你有一個單獨的路由器,在有和沒有它的情況下進行測試。這可以告訴你,你的路由器是否是一個瓶頸。如果你使用 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 的利用率。像 ConkyGlances 這樣的開源監控器,如果它們的擴展插件支持你的圖形晶元組,就可以做到這一點。

看一下 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國