计算机是集成系统,其性能速度仅取决于最慢的硬件组件。如果一个组件的性能不如其他组件——如果它落后且跟不上——它可能会拖累整个系统。这就是性能瓶颈。消除严重的瓶颈可以让您的系统飞速运转。
本文解释了如何在 Linux 系统中识别硬件瓶颈。这些技术适用于个人计算机和服务器。我的重点是 PC——我不会涵盖服务器特定的瓶颈,例如 LAN 管理或数据库系统。这些通常涉及专用工具。
我也不会过多讨论解决方案。这对于本文来说是一个太大的话题。相反,我将撰写一篇后续文章,介绍性能调整。
我将仅使用开源图形用户界面 (GUI) 工具来完成这项工作。大多数关于 Linux 瓶颈的文章都相当复杂。它们使用专门的命令并深入研究晦涩的细节。
开源提供的 GUI 工具使识别许多瓶颈变得简单。我的目标是为您提供一种快速、简便的方法,您可以在任何地方使用它。
从哪里开始
计算机由六个关键硬件资源组成
- 处理器
- 内存
- 存储
- USB 端口
- 互联网连接
- 图形处理器
如果任何一个资源性能不佳,都可能造成性能瓶颈。要识别瓶颈,您必须监视这六个资源。
开源提供了大量工具来完成这项工作。我将使用 GNOME 系统监视器。它的输出易于理解,您可以在大多数存储库中找到它。
启动它并单击资源选项卡。您可以立即识别出许多性能问题。

图 1. 系统监视器发现问题(Howard Fosdick, CC BY-SA 4.0)
资源面板显示三个部分:CPU 历史记录、内存和交换空间历史记录以及网络历史记录。快速浏览一下,您就可以立即知道您的处理器是否过载、您的计算机是否内存不足,或者您是否正在耗尽所有互联网带宽。
我将在下面探讨这些问题。现在,当您的计算机速度变慢时,首先检查系统监视器。它可以立即让您了解最常见的性能问题。
现在让我们探讨如何识别特定领域的瓶颈。
如何识别处理器瓶颈
要发现瓶颈,您必须首先了解您拥有的硬件。开源提供了多种工具来实现此目的。我喜欢 HardInfo,因为它的屏幕易于阅读且广受欢迎。
启动 HardInfo。它的计算机 -> 摘要面板标识您的 CPU,并告诉您有关其内核、线程和速度的信息。它还会标识您的主板和其他计算机组件。

图 2. HardInfo 显示硬件详细信息(Howard Fosdick, CC BY-SA 4.0)
HardInfo 显示这台计算机有一个物理 CPU 芯片。该芯片包含两个处理器或内核。每个内核支持两个线程或逻辑处理器。总共有四个逻辑处理器——这与系统监视器的 CPU 历史记录部分在图 1 中显示的内容完全一致。
当处理器无法响应对其时间的请求时,就会发生处理器瓶颈。它们已经很忙了。
当系统监视器显示逻辑处理器利用率持续超过 80% 或 90% 时,您可以识别出这一点。这是一个示例,其中四个逻辑处理器中的三个已过载,利用率为 100%。这是一个瓶颈,因为它没有为任何其他工作留下太多 CPU。

图 3. 处理器瓶颈(Howard Fosdick, CC BY-SA 4.0)
哪个应用程序导致了问题?
您需要找出哪个或哪些程序正在消耗所有 CPU。单击系统监视器的进程选项卡。然后单击 % CPU 标题,按进程消耗的 CPU 量对进程进行排序。您将看到哪些应用程序正在限制您的系统。

图 4. 识别有问题的进程(Howard Fosdick, CC BY-SA 4.0)
前三个进程各自消耗总 CPU 资源的 24%。由于有四个逻辑处理器,这意味着每个进程消耗一个完整的处理器。这与图 3 显示的完全一致。
进程面板将名为 analytical_AI 的程序识别为罪魁祸首。您可以右键单击面板中的它,以查看有关其资源消耗的更多详细信息,包括内存使用情况、它已打开的文件、其输入/输出详细信息等。
如果您的登录名具有管理员权限,您可以管理该进程。您可以更改其优先级,并停止、继续、结束或终止它。因此,您可以在此处立即解决瓶颈问题。

图 5. 右键单击进程以进行管理(Howard Fosdick, CC BY-SA 4.0)
您如何解决处理瓶颈?除了实时管理有问题的进程之外,您还可以防止瓶颈发生。例如,您可以替换另一个应用程序来代替有问题的应用程序,绕过它,在使用该应用程序时改变您的行为,将该应用程序安排在非工作时间运行,解决潜在的内存问题,对应用程序或您的系统软件进行性能调整,或者升级您的硬件。这需要涵盖的内容太多了,所以我将在我的下一篇文章中探讨这些选项。
常见的处理器瓶颈
当您使用系统监视器监视 CPU 时,您会遇到几个常见的瓶颈。
有时,当所有其他逻辑处理器都处于低利用率时,一个逻辑处理器会成为瓶颈。这意味着您有一个应用程序的代码不够智能,无法利用多个逻辑处理器,并且它已将其使用的那个处理器最大化。该应用程序完成所需的时间将比使用更多处理器时更长。另一方面,至少它可以让您的其他处理器空闲以进行其他工作,而不会占用您的计算机。
您可能还会看到一个逻辑处理器永远卡在 100% 利用率。要么它非常忙,要么进程挂起了。判断它是否挂起的方法是进程是否从不进行任何磁盘活动(如系统监视器进程面板将显示的那样)。
最后,您可能会注意到,当您的所有处理器都成为瓶颈时,您的内存也已完全利用。内存不足的情况有时会导致处理器瓶颈。在这种情况下,您需要解决潜在的内存问题,而不是症状性的 CPU 问题。
如何识别内存瓶颈
鉴于现代 PC 中内存容量很大,内存瓶颈远不如以前常见。但是,如果您运行内存密集型程序,尤其是在您的计算机没有太多随机存取存储器 (RAM) 的情况下,您仍然可能会遇到内存瓶颈。
Linux 使用内存既用于程序,也用于缓存磁盘数据。后者加快了磁盘数据访问速度。Linux 可以随时回收该内存以供程序使用。
系统监视器的资源面板显示您的总内存以及已使用多少内存。在进程面板中,您可以看到各个进程的内存使用情况。
以下是系统监视器资源面板中跟踪聚合内存使用情况的部分

图 6. 内存瓶颈(Howard Fosdick, CC BY-SA 4.0)
在内存的右侧,您会注意到 交换空间。这是 Linux 在内存不足时使用的磁盘空间。它将内存写入磁盘以继续运行,实际上是将交换空间用作 RAM 的较慢扩展。
您需要注意的两个内存性能问题是
- 内存看起来大部分已被使用,并且您看到交换空间上频繁或越来越多的活动。
- 内存和交换空间都已基本用完。
情况 1 意味着性能较慢,因为交换空间始终比内存慢。您是否认为这是一个性能问题取决于许多因素(例如,您的交换空间有多活跃、其速度、您的期望等等)。我的观点是,对于现代个人计算机而言,任何超过象征性的交换空间使用都是不可接受的。
情况 2 是内存和交换空间都已大量使用。这是一个内存瓶颈。计算机变得无响应。它甚至可能陷入颠簸状态,除了内存管理之外几乎无法完成任何操作。
上面的图 6 显示了一台只有 2GB RAM 的旧计算机。当内存使用率超过 80% 时,系统开始写入交换空间。响应速度下降。此屏幕截图显示内存使用率超过 90%,计算机已无法使用。
解决内存问题的最终答案是减少内存使用量或购买更多内存。我将在我的后续文章中讨论解决方案。
如何识别存储瓶颈
如今的存储有多种固态硬盘和机械硬盘。设备接口包括 PCIe、SATA、Thunderbolt 和 USB。无论您拥有哪种类型的存储,您都使用相同的程序来识别磁盘瓶颈。
从系统监视器开始。它的进程面板显示各个进程的输入/输出速率。因此,您可以快速识别哪些进程正在执行最多的磁盘 I/O。
但是该工具不显示每个磁盘的聚合数据传输速率。您需要查看特定磁盘上的总负载,以确定该磁盘是否是存储瓶颈。
为此,请使用 atop 命令。它在大多数 Linux 存储库中都可用。
只需在命令行提示符下键入 atop
。下面的输出显示设备 sdb
的 busy 101%
。显然,它已达到其性能极限,并且正在限制您的系统完成工作的速度。

图 7. atop 命令识别磁盘瓶颈(Howard Fosdick, CC BY-SA 4.0)
请注意,CPU 之一正在等待磁盘完成其工作 85% 的时间 (cpu001 w 85%
)。当存储设备成为瓶颈时,这是典型的。事实上,许多人首先查看 CPU I/O 等待以发现存储瓶颈。
因此,要轻松识别存储瓶颈,请使用 atop
命令。然后使用系统监视器上的进程面板来识别导致瓶颈的各个进程。
如何识别 USB 端口瓶颈
有些人整天都在使用 USB 端口。但是,他们从不检查这些端口是否得到了最佳利用。无论您插入外部磁盘、记忆棒还是其他设备,您都需要验证是否从 USB 连接的设备获得了最大性能。
此图表显示了原因。潜在的 USB 数据传输速率差异巨大。

图 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 等网站上进行测试。为了获得最佳效果,请关闭所有内容并仅运行速度测试;关闭您的 VPN;在一天中的不同时间运行测试;并比较来自多个测试站点的结果。
然后将您的结果与您的供应商声称您获得的上下载速度进行比较。这样,您可以确认您获得了您付费的速度。
如果您有单独的路由器,请在有路由器和没有路由器的情况下进行测试。这可以告诉您您的路由器是否是瓶颈。如果您使用 WiFi,请在有 WiFi 和没有 WiFi 的情况下进行测试(通过将笔记本电脑直接连接到调制解调器)。我经常看到人们抱怨他们的互联网供应商,而他们实际上拥有的是他们自己可以修复的 WiFi 瓶颈。
如果某个程序正在消耗您的整个互联网连接,您想知道是哪个程序。通过使用 nethogs
命令找到它。它在大多数存储库中都可用。
前几天,我的系统监视器突然显示我的互联网访问激增。我只是在命令行中键入了 nethogs
,它立即将带宽消耗者识别为 Clamav 防病毒更新。

图 9. Nethogs 识别带宽消费者(Howard Fosdick, CC BY-SA 4.0)
如何识别图形处理瓶颈
如果您将显示器插入台式计算机背面的主板,则您正在使用板载显卡。如果您将其插入背面的卡中,则您拥有专用图形子系统。大多数人称之为显卡或图形卡。对于台式计算机,附加卡通常比主板显卡更强大、更昂贵。笔记本电脑始终使用板载显卡。
HardInfo 的 PCI 设备面板告诉您有关您的图形处理单元 (GPU) 的信息。它还显示您拥有的专用视频内存量(查找标记为“可预取”的内存)。

图 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 瓶颈。

图 11. Conky 显示 CPU 和 GPU 利用率(图片由 AskUbuntu 论坛 提供)
在某些系统上,您需要供应商特定的工具来监视您的 GPU。它们都可以从 GitHub 下载,并在本文 GPU 监视和诊断命令行工具 中进行了描述。
总结
计算机由一组集成的硬件资源组成。如果其中任何一个资源的工作负载远远落后于其他资源,则会造成性能瓶颈。这会阻碍您的整个系统。您需要能够识别和纠正瓶颈,以实现最佳性能。
不久之前,识别瓶颈还需要深厚的专业知识。如今,开源 GUI 性能监视器让这一切变得非常简单。
在我的下一篇文章中,我将讨论提高 Linux PC 性能的具体方法。同时,请在评论中分享您自己的经验。
评论已关闭。