使用开源工具识别 Linux 性能瓶颈

不久之前,识别硬件瓶颈还需要深厚的专业知识。如今,开源 GUI 性能监视器让这一切变得非常简单。
72 位读者喜欢这篇文章。
Can government agencies be innovative?

Opensource.com

计算机是集成系统,其性能速度仅取决于最慢的硬件组件。如果一个组件的性能不如其他组件——如果它落后且跟不上——它可能会拖累整个系统。这就是性能瓶颈。消除严重的瓶颈可以让您的系统飞速运转。

本文解释了如何在 Linux 系统中识别硬件瓶颈。这些技术适用于个人计算机和服务器。我的重点是 PC——我不会涵盖服务器特定的瓶颈,例如 LAN 管理或数据库系统。这些通常涉及专用工具。

我也不会过多讨论解决方案。这对于本文来说是一个太大的话题。相反,我将撰写一篇后续文章,介绍性能调整。

我将仅使用开源图形用户界面 (GUI) 工具来完成这项工作。大多数关于 Linux 瓶颈的文章都相当复杂。它们使用专门的命令并深入研究晦涩的细节。

开源提供的 GUI 工具使识别许多瓶颈变得简单。我的目标是为您提供一种快速、简便的方法,您可以在任何地方使用它。

从哪里开始

计算机由六个关键硬件资源组成

  • 处理器
  • 内存
  • 存储
  • USB 端口
  • 互联网连接
  • 图形处理器

如果任何一个资源性能不佳,都可能造成性能瓶颈。要识别瓶颈,您必须监视这六个资源。

开源提供了大量工具来完成这项工作。我将使用 GNOME 系统监视器。它的输出易于理解,您可以在大多数存储库中找到它。

启动它并单击资源选项卡。您可以立即识别出许多性能问题。

System Monitor - Resources Panel

图 1. 系统监视器发现问题(Howard Fosdick, CC BY-SA 4.0

资源面板显示三个部分:CPU 历史记录内存和交换空间历史记录以及网络历史记录。快速浏览一下,您就可以立即知道您的处理器是否过载、您的计算机是否内存不足,或者您是否正在耗尽所有互联网带宽。

我将在下面探讨这些问题。现在,当您的计算机速度变慢时,首先检查系统监视器。它可以立即让您了解最常见的性能问题。

现在让我们探讨如何识别特定领域的瓶颈。

如何识别处理器瓶颈

要发现瓶颈,您必须首先了解您拥有的硬件。开源提供了多种工具来实现此目的。我喜欢 HardInfo,因为它的屏幕易于阅读且广受欢迎。

启动 HardInfo。它的计算机 -> 摘要面板标识您的 CPU,并告诉您有关其内核、线程和速度的信息。它还会标识您的主板和其他计算机组件。

HardInfo Summary Panel

图 2. HardInfo 显示硬件详细信息(Howard Fosdick, CC BY-SA 4.0

HardInfo 显示这台计算机有一个物理 CPU 芯片。该芯片包含两个处理器或内核。每个内核支持两个线程或逻辑处理器。总共有四个逻辑处理器——这与系统监视器的 CPU 历史记录部分在图 1 中显示的内容完全一致。

当处理器无法响应对其时间的请求时,就会发生处理器瓶颈。它们已经很忙了。

当系统监视器显示逻辑处理器利用率持续超过 80% 或 90% 时,您可以识别出这一点。这是一个示例,其中四个逻辑处理器中的三个已过载,利用率为 100%。这是一个瓶颈,因为它没有为任何其他工作留下太多 CPU。

System Monitor processor bottleneck

图 3. 处理器瓶颈(Howard Fosdick, CC BY-SA 4.0

哪个应用程序导致了问题?

您需要找出哪个或哪些程序正在消耗所有 CPU。单击系统监视器的进程选项卡。然后单击 % CPU 标题,按进程消耗的 CPU 量对进程进行排序。您将看到哪些应用程序正在限制您的系统。

System Monitor Processes panel

图 4. 识别有问题的进程(Howard Fosdick, CC BY-SA 4.0

前三个进程各自消耗 CPU 资源的 24%。由于有四个逻辑处理器,这意味着每个进程消耗一个完整的处理器。这与图 3 显示的完全一致。

进程面板将名为 analytical_AI 的程序识别为罪魁祸首。您可以右键单击面板中的它,以查看有关其资源消耗的更多详细信息,包括内存使用情况、它已打开的文件、其输入/输出详细信息等。

如果您的登录名具有管理员权限,您可以管理该进程。您可以更改其优先级,并停止、继续、结束或终止它。因此,您可以在此处立即解决瓶颈问题。

System Monitor managing a process

图 5. 右键单击进程以进行管理(Howard Fosdick, CC BY-SA 4.0

您如何解决处理瓶颈?除了实时管理有问题的进程之外,您还可以防止瓶颈发生。例如,您可以替换另一个应用程序来代替有问题的应用程序,绕过它,在使用该应用程序时改变您的行为,将该应用程序安排在非工作时间运行,解决潜在的内存问题,对应用程序或您的系统软件进行性能调整,或者升级您的硬件。这需要涵盖的内容太多了,所以我将在我的下一篇文章中探讨这些选项。

常见的处理器瓶颈

当您使用系统监视器监视 CPU 时,您会遇到几个常见的瓶颈。

有时,当所有其他逻辑处理器都处于低利用率时,一个逻辑处理器会成为瓶颈。这意味着您有一个应用程序的代码不够智能,无法利用多个逻辑处理器,并且它已将其使用的那个处理器最大化。该应用程序完成所需的时间将比使用更多处理器时更长。另一方面,至少它可以让您的其他处理器空闲以进行其他工作,而不会占用您的计算机。

您可能还会看到一个逻辑处理器永远卡在 100% 利用率。要么它非常忙,要么进程挂起了。判断它是否挂起的方法是进程是否从不进行任何磁盘活动(如系统监视器进程面板将显示的那样)。

最后,您可能会注意到,当您的所有处理器都成为瓶颈时,您的内存也已完全利用。内存不足的情况有时会导致处理器瓶颈。在这种情况下,您需要解决潜在的内存问题,而不是症状性的 CPU 问题。

如何识别内存瓶颈

鉴于现代 PC 中内存容量很大,内存瓶颈远不如以前常见。但是,如果您运行内存密集型程序,尤其是在您的计算机没有太多随机存取存储器 (RAM) 的情况下,您仍然可能会遇到内存瓶颈。

Linux 使用内存既用于程序,也用于缓存磁盘数据。后者加快了磁盘数据访问速度。Linux 可以随时回收该内存以供程序使用。

系统监视器的资源面板显示您的总内存以及已使用多少内存。在进程面板中,您可以看到各个进程的内存使用情况。

以下是系统监视器资源面板中跟踪聚合内存使用情况的部分

System Monitor memory bottleneck

图 6. 内存瓶颈(Howard Fosdick, CC BY-SA 4.0

在内存的右侧,您会注意到 交换空间。这是 Linux 在内存不足时使用的磁盘空间。它将内存写入磁盘以继续运行,实际上是将交换空间用作 RAM 的较慢扩展。

您需要注意的两个内存性能问题是

  1. 内存看起来大部分已被使用,并且您看到交换空间上频繁或越来越多的活动。
  2. 内存和交换空间都已基本用完。

情况 1 意味着性能较慢,因为交换空间始终比内存慢。您是否认为这是一个性能问题取决于许多因素(例如,您的交换空间有多活跃、其速度、您的期望等等)。我的观点是,对于现代个人计算机而言,任何超过象征性的交换空间使用都是不可接受的。

情况 2 是内存和交换空间都已大量使用。这是一个内存瓶颈。计算机变得无响应。它甚至可能陷入颠簸状态,除了内存管理之外几乎无法完成任何操作。

上面的图 6 显示了一台只有 2GB RAM 的旧计算机。当内存使用率超过 80% 时,系统开始写入交换空间。响应速度下降。此屏幕截图显示内存使用率超过 90%,计算机已无法使用。

解决内存问题的最终答案是减少内存使用量或购买更多内存。我将在我的后续文章中讨论解决方案。

如何识别存储瓶颈

如今的存储有多种固态硬盘和机械硬盘。设备接口包括 PCIe、SATA、Thunderbolt 和 USB。无论您拥有哪种类型的存储,您都使用相同的程序来识别磁盘瓶颈。

从系统监视器开始。它的进程面板显示各个进程的输入/输出速率。因此,您可以快速识别哪些进程正在执行最多的磁盘 I/O。

但是该工具不显示每个磁盘的聚合数据传输速率。您需要查看特定磁盘上的总负载,以确定该磁盘是否是存储瓶颈。

为此,请使用 atop 命令。它在大多数 Linux 存储库中都可用。

只需在命令行提示符下键入 atop。下面的输出显示设备 sdbbusy 101%。显然,它已达到其性能极限,并且正在限制您的系统完成工作的速度。

atop disk bottleneck

图 7. atop 命令识别磁盘瓶颈(Howard Fosdick, CC BY-SA 4.0

请注意,CPU 之一正在等待磁盘完成其工作 85% 的时间 (cpu001 w 85%)。当存储设备成为瓶颈时,这是典型的。事实上,许多人首先查看 CPU I/O 等待以发现存储瓶颈。

因此,要轻松识别存储瓶颈,请使用 atop 命令。然后使用系统监视器上的进程面板来识别导致瓶颈的各个进程。

如何识别 USB 端口瓶颈

有些人整天都在使用 USB 端口。但是,他们从不检查这些端口是否得到了最佳利用。无论您插入外部磁盘、记忆棒还是其他设备,您都需要验证是否从 USB 连接的设备获得了最大性能。

此图表显示了原因。潜在的 USB 数据传输速率差异巨大

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 等网站上进行测试。为了获得最佳效果,请关闭所有内容并运行速度测试;关闭您的 VPN;在一天中的不同时间运行测试;并比较来自多个测试站点的结果。

然后将您的结果与您的供应商声称您获得的上下载速度进行比较。这样,您可以确认您获得了您付费的速度。

如果您有单独的路由器,请在有路由器和没有路由器的情况下进行测试。这可以告诉您您的路由器是否是瓶颈。如果您使用 WiFi,请在有 WiFi 和没有 WiFi 的情况下进行测试(通过将笔记本电脑直接连接到调制解调器)。我经常看到人们抱怨他们的互联网供应商,而他们实际上拥有的是他们自己可以修复的 WiFi 瓶颈。

如果某个程序正在消耗您的整个互联网连接,您想知道是哪个程序。通过使用 nethogs 命令找到它。它在大多数存储库中都可用。

前几天,我的系统监视器突然显示我的互联网访问激增。我只是在命令行中键入了 nethogs,它立即将带宽消耗者识别为 Clamav 防病毒更新。

Nethogs

图 9. Nethogs 识别带宽消费者(Howard Fosdick, CC BY-SA 4.0

如何识别图形处理瓶颈

如果您将显示器插入台式计算机背面的主板,则您正在使用板载显卡。如果您将其插入背面的卡中,则您拥有专用图形子系统。大多数人称之为显卡图形卡。对于台式计算机,附加卡通常比主板显卡更强大、更昂贵。笔记本电脑始终使用板载显卡。

HardInfo 的 PCI 设备面板告诉您有关您的图形处理单元 (GPU) 的信息。它还显示您拥有的专用视频内存量(查找标记为“可预取”的内存)。

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 and GPU monitoring

图 11. Conky 显示 CPU 和 GPU 利用率(图片由 AskUbuntu 论坛 提供)

在某些系统上,您需要供应商特定的工具来监视您的 GPU。它们都可以从 GitHub 下载,并在本文 GPU 监视和诊断命令行工具 中进行了描述。

总结

计算机由一组集成的硬件资源组成。如果其中任何一个资源的工作负载远远落后于其他资源,则会造成性能瓶颈。这会阻碍您的整个系统。您需要能够识别和纠正瓶颈,以实现最佳性能。

不久之前,识别瓶颈还需要深厚的专业知识。如今,开源 GUI 性能监视器让这一切变得非常简单。

在我的下一篇文章中,我将讨论提高 Linux PC 性能的具体方法。同时,请在评论中分享您自己的经验。

接下来阅读什么
标签
User profile image.
Howard Fosdick 是一位独立顾问,以 DBA/SA 的身份亲力亲为。他撰写了多本技术书籍、许多文章,并且是一位受欢迎的会议演讲者。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可获得许可。
© . All rights reserved.