不久前,识别硬件瓶颈需要深厚的专业知识。今天的开源GUI性能监视器使它变得相当容易。计算机是一个集成系统,其性能由最慢的硬件组件决定。如果一个组件的能力不如其他组件,性能落后并且无法跟上,它可能会拖累整个系统。这是一个性能瓶颈。消除严重的瓶颈可以让你的系统飞起来。本文介绍了如何识别Linux系统中的硬件瓶颈。这些技术适用于个人计算机和服务器。我的重点是PC——我不会讨论LAN管理或数据库系统等领域中特定于服务器的瓶颈。这些通常涉及专门的工具。我也不会过多谈论解决方案。对于本文来说,这个话题太大了。相反,我将写一篇关于性能调优的后续文章。我将只使用开源图形用户界面(GUI)工具来完成这项工作。大多数关于Linux瓶颈的文章都相当复杂。他们使用专门的命令并钻研神秘的细节。开源提供的GUI工具使识别许多瓶颈变得简单。我的目标是为您提供一种可以在任何地方使用的快速简便的方法。从哪里开始一台计算机由六种关键硬件资源组成。处理器内存存储USB端口互联网连接图形处理器如果任何一种资源表现不佳,就会造成性能瓶颈。要识别瓶颈,您必须监控这六种资源。开源提供了大量工具来完成这项工作。我会使用GNOME系统监视器。它的输出很容易理解,您可以在大多数软件存储库中找到它。启动它并单击“资源”选项卡。您可以立即发现许多性能问题。图1.系统监视器发现问题。(HowardFosdick,CCBY-SA4.0)在资源面板上显示三个部分:CPU历史、内存和交换历史以及网络历史。如果您的处理器不堪重负、计算机内存不足或网络带宽已用尽,一目了然。我在下面探讨这些问题。现在,当您的计算机变慢时,请先检查系统监视器。它为您提供最常见性能问题的即时线索。现在让我们探讨如何识别特定领域的瓶颈。如何识别处理器瓶颈要找到瓶颈,您必须首先了解您拥有的硬件。开源为此提供了多种工具。我喜欢HardInfo,因为它的屏幕显示易于阅读且广受欢迎。启动硬信息。它的“计算机->摘要”面板可以识别您的CPU并告诉您它的核心数、线程数和速度。它还可以识别您的主板和其他计算机组件。图2.显示硬件详细信息的HardInfo。(HowardFosdick,CCBY-SA4.0)HardInfo显示这台计算机有一个物理CPU芯片。该芯片包含两个处理器(或内核)。每个内核支持两个线程(或逻辑处理器)。总共有四个逻辑处理器——正是图1中系统监视器的CPU历史部分所显示的。当处理器无法在其时间内响应请求时,就会出现处理器瓶颈,这表明它们已经很忙。当系统监视器显示逻辑处理器利用率始终高于80%或90%时,您可以确定这一点。这是一个示例,其中四分之三的逻辑处理器在100%的利用率下被淹没。这是一个瓶颈,因为它不会为其他工作留下太多CPU。图3.处理器瓶颈。(HowardFosdick,CCBY-SA4.0)哪个程序导致了这个问题?您需要找出哪个程序占用了所有CPU。单击系统监视器的“进程”选项卡。然后单击“CPU百分比”标题以按进程消耗的CPU量对进程进行排序。您会看到哪些应用正在杀死您的系统。图4.识别违规的过程。(HowardFosdick,CCBY-SA4.0)前三个进程各消耗24%的CPU资源总量。由于有四个逻辑处理器,这意味着每个进程都占用一个完整的处理器。如图3所示。在“进程”面板上,一个名为“analytical_AI”的程序被确定为罪魁祸首。您可以在面板上右键单击它以查看有关其资源消耗的更多详细信息,包括内存使用情况、已打开的文件、输入/输出详细信息等。如果您的登录会话具有管理员权限,则您可以管理此过程。您可以更改其优先级并停止、继续、结束或终止它。因此,您可以在这里立即解决您的瓶颈问题。图5.右键单击??进程以对其进行管理。(HowardFosdick,CCBY-SA4.0)如何解决处理瓶颈问题?除了实时管理有问题的流程外,您还可以防止出现瓶颈。例如,您可以用另一个应用程序替换有问题的进程、绕过它、更改您使用该应用程序的方式、安排应用程序下班时间、解决潜在的内存问题、系统软件以进行性能调整或升级您的硬件。这里有很多内容要介绍,所以我将在下一篇文章中探讨这些方法。常见的处理器瓶颈在使用系统监视器监视CPU时,您会遇到几个常见的瓶颈。有时一个逻辑处理器出现瓶颈,而所有其他处理器都未得到充分利用。这意味着您的应用程序的代码不够智能,无法利用多个逻辑处理器,而且它已经用完了它正在使用的处理器。与使用更多处理器相比,此应用程序将花费更长的时间来完成。但另一方面,至少它可以让您的其他处理器腾出时间来做其他工作,而无需接管您的计算机。您可能还会看到逻辑处理器永远停留在100%的利用率。要么很忙,要么进程挂了。判断它是否挂起的方法是查看进程是否从不进行任何磁盘活动(如系统监视器进程面板所示)。最后,您可能会注意到,虽然您的所有处理器都出现了瓶颈,但您的内存也得到了充分利用。低内存条件有时会导致处理器瓶颈。在这种情况下,您要解决的是底层内存问题,而不是有症状的CPU问题。如何识别内存瓶颈鉴于现代PC中的大量内存,内存瓶颈比以前少得多。但是,如果您运行内存密集型程序,您仍然会遇到这些问题,尤其是当您的计算机没有大量随机存取内存(RAM)时。Linux将内存用于程序和缓存磁盘数据。后者加快了对磁盘数据的访问。Linux可以在需要时回收此内存以供程序使用。系统监视器的“资源”窗格显示您的总内存及其使用量。在Processes面板上,您可以看到各个进程的内存使用情况。下面是跟踪总内存使用情况的系统监视器资源面板部分。图6.内存瓶颈。(HowardFosdick,CCBY-SA4.0)在“内存”的右侧,您会注意到交换空间。这是Linux内存不足时使用的磁盘空间。它将内存写入磁盘以继续操作,有效地使用交换空间作为内存的较慢扩展。您要注意的两个内存性能问题是:内存被大量使用并且您看到交换空间活动很高或不断增加。内存和交换空间都被大量使用。第一种情况意味着性能较慢,因为交换空间总是比内存慢。您是否认为这是一个性能问题取决于许多因素(例如,您的交换空间有多活跃、速度有多快、您的期望等)。我的观点是,对于现代PC来说,交换空间的使用不仅仅是象征性的。第二种情况意味着内存和交换空间都被大量使用。这是内存瓶颈。计算机变得无响应。它甚至可能陷入“咆哮”状态,在这种状态下它除了内存管理外几乎无能为力。上面的图6显示了一台只有2GBRAM的旧计算机。当内存使用率超过80%时,系统开始写入交换空间,响应速度下降。此屏幕截图显示内存使用率超过90%,计算机无法使用。内存问题的最终答案是要么使用更少的内存,要么购买更多的内存。我将在后续文章中讨论解决方案。如何识别存储瓶颈当今有多种类型的存储,例如固态硬盘和机械硬盘。设备接口包括PCIe、SATA、Thunderbolt和USB。无论您拥有何种类型的存储,都可以使用相同的过程来识别磁盘瓶颈。从系统监视器开始。它的进程面板显示了各个进程的输入/输出速率。因此,您可以快速确定哪些进程执行的磁盘I/O最多。但该工具不会显示每个磁盘的总数据传输速率。您需要查看特定磁盘上的总负载以确定该磁盘是否是存储瓶颈。为此,请使用atop命令。它在大多数Linux软件存储库中可用。只需在命令行提示符处键入atop。下面的输出显示设备sdb忙于101%。显然,它达到了性能极限,限制了系统完成工作的速度。图7.atop命令识别磁盘瓶颈。(HowardFosdick,CCBY-SA4.0)注意到其中一个CPU花费了85%的时间等待磁盘完成其工作(cpu001w85%)。这是存储设备成为瓶颈的典型情况。事实上,很多人首先查看CPUI/O等待时间来寻找存储瓶颈。因此,要轻松识别存储瓶颈,请使用atop命令。然后使用系统监视器上的进程面板来识别导致瓶颈的各个进程。如何识别USB端口瓶颈有些人整天都在使用USB端口。但是,他们从不检查这些端口是否得到了最佳使用。无论您是插入外部磁盘、USB记忆棒还是其他东西,您都希望确保从USB连接设备获得最佳性能。这张图表显示了原因。潜在的USB数据传输速率差异很大。图8.USB速度差异很大。(HowardFosdick,基于Tripplite和维基百科的数字,CCBY-SA4.0)HardInfo的“USB设备”选项卡显示您的计算机支持的??USB标准。大多数计算机提供不止一种速度。您如何知道特定端口的速度?供应商对它们进行颜色编码,如图表所示。或者您可以在计算机的文档中查找它。要查看您获得的实际速度,请使用开源GNOME磁盘实用程序对其进行测试。只需启动GNOME磁盘,选择其“磁盘基准测试”功能,然后运行基准测试。这将告诉您将特定设备插入端口时可以获得的最大实际速度。您可能会获得不同的端口传输速度,具体取决于您插入的设备。数据速率取决于端口和设备的特定组合。例如,可以以3.1速度运行的设备如果使用2.0端口将以2.0速度运行。(而且它不会告诉您它正在以较慢的速度运行!)相反,如果您将USB2.0设备插入3.1端口,它可以工作,但速度为2.0。因此,要获得快速USB,您必须确保端口和设备都支持它。GNOMEDisks为您提供了验证这一点的方法。要识别USB处理瓶颈,请使用您对SSD和HDD执行的相同过程。运行atop命令查找USB存储瓶颈。然后,使用系统监视器获取有关违规进程的详细信息。如何识别Internet带宽瓶颈SystemMonitor的资源面板会实时告诉您您的Internet连接速度(见图1)。有很好的Python工具可以测试您的最大互联网速度,但您也可以在Speedtest、Fast.com和Speakeasy等网站上进行测试。为获得最佳结果,请关闭一切并仅运行速度测试;关闭你的VPN;在一天中的不同时间运行测试;并比较几个测试站点的结果。然后将您的结果与提供商声称的下载和上传速度进行比较。这样,您就可以确定您获得了所支付的速度。如果您有单独的路由器,请在使用和不使用它的情况下进行测试。这可以告诉您路由器是否存在瓶颈。如果您使用WiFi,请在使用和不使用WiFi的情况下进行测试(通过将笔记本电脑直接连接到调制解调器)。我经常看到人们抱怨他们的互联网提供商,而实际上他们只是遇到WiFi瓶颈并且可以自己解决。如果某个程序占用了您的整个互联网连接,您想知道是哪一个。使用nethogs命令找到它。它在大多数软件存储库中都可用。有一天,我的系统监视器突然显示我的互联网访问量激增。我只是在命令行中输入nethogs,它立即确定占用带宽的是Clamav防病毒更新。图9.Nethogs识别带宽用户。(HowardFosdick,CCBY-SA4.0)如何识别图形瓶颈如果您将显示器插入台式计算机后面的主板,则您正在使用板载显卡。如果你把它插到背卡上,你就有了一个专用的图形子系统。大多数人称之为视频卡或图形卡。对于台式电脑,外接显卡通常比主板上的显卡更强大,也更昂贵。笔记本电脑始终使用板载显卡。HardInfo的“PCI设备”面板会告诉您有关图形处理单元(GPU)的信息。它还会显示专用视频内存的数量(寻找标记为“可预取”的内存)。图10.HardInfo提供图形处理信息。(HowardFosdick,CCBY-SA4.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性能监视器使它变得相当容易。
