分类 技术 下的文章

升级你的电脑硬件来提升性能,以获得最大的回报。

 title=

在我的文章《使用开源工具识别 Linux 性能瓶颈》中,我解释了一些使用开源的图形用户界面(GUI)工具监测 Linux 性能的简单方法。我的重点是识别 性能瓶颈,即硬件资源达到极限并阻碍你的 PC 性能的情况。

你会如何解决性能瓶颈问题呢?你可以调整应用程序或系统软件。或者你可以运行更高效的应用程序。你甚至可以改变你使用电脑的行为,例如,将后台程序安排在非工作时间。

你也可以通过硬件升级来提高电脑的性能。本文重点介绍可以给你带来最大回报的升级。

开源工具是关键。GUI 工具可以帮助你监控你的系统,预测哪些硬件改进会有效。否则,你可能买了硬件后发现它并没有提高性能。在升级之后,这些工具也有助于验证升级是否产生了你预期的好处。

这篇文章概述了一种简单的 PC 硬件升级的方法,其“秘诀”是开源的 GUI 工具。

如何升级内存

几年前,升级内存是不用多想的。增加内存几乎总是能提高性能。

今天,情况不再是这样了。个人电脑配备了更多的内存,而且 Linux 能非常有效地使用它。如果你购买了系统用不完的内存,就浪费了钱。

因此,你要花一些时间来监测你的电脑,看看内存升级是否会有助于提升它的性能。例如,在你进行典型的一天工作时观察内存的使用情况。而且一定要检查在内存密集型工作负载中发生了什么。

各种各样的开源工具可以帮助你进行这种监测,不过我用的是 GNOME 系统监视器。它在大多数 Linux 软件库中都有。

当你启动系统监视器时,它的“资源”面板会显示这样的输出:

 title=

图 1. 用 GNOME 系统监视器监控内存 (Howard Fosdick, CC BY-SA 4.0)

屏幕中间显示了内存的使用情况。交换空间 是 Linux 在内存不足时使用的磁盘空间。Linux 通过使用交换空间作为内存的一个较慢的扩展来有效地增加内存。

由于交换空间比内存慢,如果内存交换活动变得显著,增加内存将改善你的计算机的性能。你会得到多大的改善取决于交换活动的数量和交换空间所在的设备的速度。

如果使用了大量的交换空间,你通过增加内存会得到比只使用了少量交换空间更多的性能改善。

如果交换空间位于慢速的机械硬盘上,你会发现增加内存比将交换空间放在最快的固态硬盘上改善更多。

下面是一个关于何时增加内存的例子。这台电脑在内存利用率达到 80% 后显示交换活动在增加。当内存利用率超过 90% 时,它就变得失去反应了。

 title=

图 2. 内存升级会有帮助(Howard Fosdick, CC BY-SA 4.0)

如何进行内存升级

在升级之前,你需要确定你有多少个内存插槽,有多少个是空的,它们需要什么样的内存条,以及你的主板所允许的最大内存。

你可以阅读你的计算机的文档来获得这些答案。或者,你可以直接输入这些 Linux 命令行:

问题命令
已安装的内存条有什么特点?sudo lshw -short -C memory
这台计算机允许的最大内存是多少?`sudo dmidecode -t memorygrep -i max`
有多少个内存插槽是空的?(没有输出意味着没有可用的)`sudo lshw -short -C memorygrep -i empty`

与所有的硬件升级一样,事先拔掉计算机的电源插头。在你接触硬件之前,将自己接地 —— 即使是最微小的电涌也会损坏电路。将内存条完全插入主板的插槽中。

升级后,启动系统监视器。运行之前使你的内存超载的相同程序。

系统监控器应该显示出你扩充的内存,而且你应该发现性能更好了。

如何升级存储

我们正处在一个存储快速改进的时代。即使是只用了几年的计算机也可以从磁盘升级中受益。但首先,你要确保升级对你的计算机和工作负载是有意义的。

首先,要找出你有什么磁盘。许多开源工具会告诉你。HardinfoGNOME 磁盘 是不错的选择,因为它们都是广泛可用的,而且它们的输出很容易理解。这些应用程序会告诉你磁盘的品牌、型号和其他细节。

接下来,通过基准测试来确定你的磁盘性能。GNOME 磁盘让这一切变得简单。只要启动该工具并点击它的“磁盘基准测试”选项。这会给出你磁盘的读写率和平均磁盘访问时间。

 title=

图 3. GNOME 磁盘基准输出(Howard Fosdick, CC BY-SA 4.0)

有了这些信息,你可以在 PassMark SoftwareUserBenchmark 等基准测试网站上将你的磁盘与其他人进行比较。这些网站提供性能统计、速度排名,甚至价格和性能数字。你可以了解到你的磁盘与可能的替代品相比的情况。

下面是你可以在 UserBenchmark 找到的一些详细磁盘信息的例子。

 title=

图 4. 在 UserBenchmark 进行的磁盘比较

监测磁盘利用率

就像你对内存所做的那样,实时监控你的磁盘,看看更换磁盘是否会提高性能。atop 命令行 会告诉你一个磁盘的繁忙程度。

在它下面的输出中,你可以看到设备 sdbbusy 101%。其中一个处理器有 85% 的时间在等待该磁盘进行工作(cpu001 w 85%)。

 title=

图 5. atop 命令显示磁盘利用率(Howard Fosdick, CC BY-SA 4.0

很明显,你可以用一个更快的磁盘来提高性能。

你也会想知道是哪个程序使用了磁盘。只要启动系统监视器并点击其“进程”标签。

现在你知道了你的磁盘有多忙,以及哪些程序在使用它,所以你可以做出一个有根据的判断,是否值得花钱买一个更快的磁盘。

购买磁盘

购买新的内置磁盘时,你会遇到三种主流技术:

  • 机械硬盘(HDD)
  • SATA 接口的固态硬盘(SSD)
  • PCIe 接口的 NVMe 固态磁盘(NVMe SSD)

它们的速度差异是什么?你会在网上看到各种不同的数字。这里有一个典型的例子。

 title=

图 6. 内部磁盘技术的相对速度(Unihost

  • 红色柱形图: 机械硬盘提供最便宜的大容量存储。但就性能而言,它们是迄今为止最慢的。
  • 绿色柱形图: 固态硬盘比机械硬盘快。但如果固态硬盘使用 SATA 接口,就会限制其性能。这是因为 SATA 接口是十多年前为机械硬盘设计的。
  • 蓝色柱形图: 最快的内置磁盘技术是新的 PCIe 接口的 NVMe 固态盘。这些可以比 SATA 连接的固态硬盘大约快 5 倍,比机械硬盘快 20 倍。

对于外置 SSD,你会发现 最新的雷电接口和 USB 接口 是最快的。

如何安装一个内置磁盘

在购买任何磁盘之前,请确认你的计算机支持必要的物理接口。

例如,许多 NVMe 固态硬盘使用流行的新 M.2(2280)外形尺寸。这需要一个量身定做的主板插槽、一个 PCIe 适配器卡,或一个外部 USB 适配器。你的选择可能会影响你的新磁盘的性能。

在安装新磁盘之前,一定要备份你的数据和操作系统。然后把它们复制到新磁盘上。像 Clonezilla、Mondo Rescue 或 GParted 这样的开源 工具 可以完成这项工作。或者你可以使用 Linux 命令行,如 ddcp

请确保在最有影响的情况下使用你的快速新磁盘。把它用作启动盘、存储操作系统和应用程序、交换空间,以及最常处理的数据。

升级之后,运行 GNOME 磁盘来测试你的新磁盘。这可以帮助你验证你是否得到了预期的性能提升。你可以用 atop 命令来验证实时运行。

如何升级 USB 端口

与磁盘存储一样,USB 的性能在过去几年中也有了长足的进步。许多只用了几年的计算机只需增加一个廉价的 USB 端口卡就能获得很大的性能提升。

这种升级是否值得,取决于你使用端口的频率。很少使用它们,如果它们很慢也没有关系。经常使用它们,升级可能真的会影响你的工作。

下面是不同端口标准的最大 USB 数据速率的巨大差异。

 title=

图 7. USB 速度差别很大(Howard Fosdick,CC BY-SA 4.0,基于 Tripplite维基 的数据

要查看你得到的实际 USB 速度,请启动 GNOME 磁盘。GNOME 磁盘可以对 USB 连接的设备进行基准测试,就像对内部磁盘一样。选择其“磁盘基准测试”选项。

你插入的设备和 USB 端口共同决定了你将得到的速度。如果端口和设备不匹配,你将体验到两者中较慢的速度。

例如,将一个支持 USB 3.1 速度的设备连接到一个 2.0 端口,你将得到 2.0 的数据速率。你的系统不会告诉你这一点,除非你用 GNOME 磁盘这样的工具来检查)。反之,将 2.0 设备连接到 3.1 端口,你也会得到 2.0 的速度。因此,为了获得最好的结果,总是要匹配你的端口和设备的速度。

要实时监控 USB 连接的设备,请使用 atop 命令和系统监控器,就像你监控内部磁盘一样。这可以帮助你看到是否碰到了当前设置的限制,并可以通过升级而受益。

升级你的端口很容易。只要购买一个适合你的空闲的 PCIe 插槽的 USB 卡。

USB 3.0 卡的价格只有 25 美元左右。较新、较贵的卡提供 USB 3.1 和 3.2 端口。几乎所有的 USB 卡都是即插即用的,所以 Linux 会自动识别它们。但在购买前一定要核实。

请确保在升级后运行 GNOME 磁盘以验证新的速度。

如何升级你的互联网连接

升级你的互联网带宽很容易。只要给你的 ISP 写一张支票即可。

问题是,应该升级吗?

系统监控器显示了你的带宽使用情况(见图 1)。如果你经常遇到你从 ISP 购买的带宽限额,你会从购买更高的限额中受益。

但首先,要确认你是否有一个可以自己解决的问题。我见过很多案例,有人认为他们需要从 ISP 那里购买更多的带宽,而实际上他们只是有一个可以自己解决的连接问题。

首先在 SpeedtestFast.com 等网站测试你的最大网速。为了获得准确的结果,关闭所有程序,只运行速度测试;关闭你的虚拟私有网络;在一天中的不同时间运行测试;并比较几个测试网站的结果。如果你使用 WiFi,在有 WiFi 和没有 WiFi 的情况下进行测试(将你的笔记本电脑直接与调制解调器连接)。

如果你有一个单独的路由器,在有它和没有它的情况下进行测试。这将告诉你路由器是否是瓶颈。有时,只是重新定位你家里的路由器或更新其固件就能提高连接速度。

这些测试将验证你是否得到了你从 ISP 购买的带宽速度。它们也会暴露出任何你可以自己解决的本地 WiFi 或路由器问题。

只有在你做了这些测试之后,你才应该得出结论,你需要购买更多的网络带宽。

你应该升级你的 CPU 还是 GPU?

升级你的 CPU(中央处理单元)或 GPU(图形处理单元)呢?

笔记本电脑用户通常不能升级这两个单元,因为它们被焊接在主板上。

大多数台式机主板支持一系列的 CPU,并且是可以升级的 —— 假设你还没有使用该系列中最顶级的处理器。

使用系统监视器观察你的 CPU,并确定升级是否有帮助。它的“资源”面板将显示你的 CPU 负载。如果你的所有逻辑处理器始终保持在 80% 或 90% 以上,你可以从更多的 CPU 功率中受益。

这是一个升级 CPU 的有趣项目。只要小心谨慎,任何人都可以做到这一点。

不幸的是,这几乎没有成本效益。大多数卖家对单个 CPU 芯片收取溢价,比他们卖给你的新系统要高。因此,对许多人来说,升级 CPU 并不具有经济意义。

如果你将显示器直接插入台式机的主板,你可能会通过升级图形处理器而受益。只需添加一块显卡。

诀窍是在新显卡和你的 CPU 之间实现平衡的工作负荷。这个 在线工具 能准确识别哪些显卡能与你的 CPU 最好地配合。这篇文章 详细解释了如何去升级你的图形处理。

在升级前收集数据

个人电脑用户有时会根据直觉来升级他们的 Linux 硬件。一个更好的方法是先监控性能并收集一些数据。开源的 GUI 工具使之变得简单。它们有助于预测硬件升级是否值得你花时间和金钱。然后,在你升级之后,你可以用它们来验证你的改变是否达到了预期效果。

这些是最常见的硬件升级。只要稍加努力并使用正确的开源工具,任何 Linux 用户都可以经济有效地升级一台 PC。


via: https://opensource.com/article/21/4/upgrade-linux-hardware

作者:Howard Fosdick 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

探索只接受位置参数和其他两个未被充分利用但仍然有用的 Python 特性。

 title=

这是 Python 3.x 首发特性系列文章的第九篇。Python 3.8 于 2019 年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。下面是其中的三个。

importlib.metadata

入口点 在 Python 包中被用来做各种事情。大多数人熟悉的是 console\_scripts 入口点,不过 Python 中的许多插件系统都使用它们。

在 Python 3.8 之前,从 Python 中读取入口点的最好方法是使用 pkg_resources,这是一个有点笨重的模块,它是 setuptools 的一部分。

新的 importlib.metadata 是一个内置模块,它允许访问同样的东西:

from importlib import metadata as importlib_metadata

distribution = importlib_metadata.distribution("numpy")
distribution.entry_points
    [EntryPoint(name='f2py', value='numpy.f2py.f2py2e:main', group='console_scripts'),
     EntryPoint(name='f2py3', value='numpy.f2py.f2py2e:main', group='console_scripts'),
     EntryPoint(name='f2py3.9', value='numpy.f2py.f2py2e:main', group='console_scripts')]

入口点并不是 importlib.metadata 允许访问的唯一东西。可以调试、报告,或者(在极端情况下)触发兼容模式,你也可以在运行时检查依赖的版本!

f"{distribution.metadata['name']}=={distribution.version}"`[/code] [code]`    'numpy==1.20.1'

只接受位置参数

强制关键字的参数在传达 API 作者的意图方面取得巨大成功之后,另一个空白被填补了:只接受位置参数。

特别是对于那些允许使用任意关键字的函数(例如,生成数据结构),这意味着对允许的参数名称的限制更少:

def some_func(prefix, /, **kwargs):
    print(prefix, kwargs)
some_func("a_prefix", prefix="prefix keyword value")
   a_prefix {'prefix': 'prefix keyword value'}`

注意,令人困惑的是,变量 prefix 的值与 kwargs["prefix"] 的值不同。就像在很多地方一样,要注意小心使用这个功能。

自我调试表达式

50 多年来,print() 语句(及其在其他语言中的对应语句)一直是快速调试输出的最爱。

但是我们在打印语句方面取得了很大的进展,比如:

special_number = 5
print("special_number = %s" % special_number)
    special_number = 5

然而,自我记录的 f-strings 使它更容易明确:

print(f"{special_number=}")
    special_number=5`

在 f-string 插值部分的末尾添加一个 =,可以保留字面部分,同时添加数值。

当更复杂的表达式在该部分内时,这就更有用了:

values = {}
print(f"{values.get('something', 'default')=}")
    values.get('something', 'default')='default'

欢迎来到 2019 年

Python 3.8 大约在两年前发布,它的一些新特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。


via: https://opensource.com/article/21/5/python-38-features

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这是一份初学者指南,展示了在基于 Ubuntu 的 Linux 发行版上设置 XRDP 所需要遵循的步骤。有了它,你就可以从不同的电脑上访问你的 Ubuntu 系统,并以图形方式使用它。

微软的 远程桌面协议(RDP) 是一个允许从一台计算机到另一台计算机进行图形化远程桌面连接的协议。RDP 的工作原理是让一台主机运行软件,允许其他几台计算机连接到它。

XRDP 是 RDP 的一个开源实现,不需要运行任何专有程序。XRDP 不仅试图遵循 RDP,而且还与常规的 RDP 客户端兼容,如 RemminaGNOME Boxes

下面是 XRDP 连接屏幕的样子。

使用 XRDP 需要注意的事项

虽然 XRDP 对于机器的远程访问非常好用,但重要的是要知道 XRDP 适合什么。

如果你需要一个安全的连接,请不要使用 XRDP

通过 XRDP 建立的连接可以被攻击者查看和修改,因此应避免任何敏感信息。这一点可以通过使用 SSH 连接或证书来缓解,但这两者都需要更复杂的设置,这里就不一一介绍了。

XRDP 在默认情况下不能很好地应用主题

在我的测试中,XRDP 默认似乎从未应用过 Ubuntu 主题。在文章的结尾处有关于解决这个问题的说明。

如果你只想/需要一个 CLI 环境,就不要使用 XRDP

XRDP 是为在 GUI 环境中使用而设计和制造的。如果你打算在 CLI 环境中使用它,比如在服务器上,你应该看看其他工具,比如 SSH。

在 Ubuntu 上安装和使用 XRDP

下面是这个远程连接设置正常工作所需的设置:

  • 一个安装了 XRDP 服务器的 Linux 系统。这是一个将被远程访问的系统。
  • 远程系统应该和你的系统在同一个网络上,或者它应该有一个 公共 IP 地址
  • 远程 Linux 系统的用户名和密码。
  • 安装有 RDP 客户端的另一个系统(无论是 Linux、macOS 还是 Windows)。

第 1 步:在远程计算机上安装 XRDP

安装 XRDP 只需几个步骤,而且是相当直接的操作。

备注:在访问任何地方之前,请注意,这里说的 “远程机器” 是其他人连接到的机器。

XRDP 包含在大多数发行版的软件库中。在 Ubuntu 上,你可以在 universe 库中找到它。

你可以用下面的命令来安装它:

sudo apt install xrdp

第 2 步:连接到远程机器

好消息是,XRDP 开箱就能使用!

要连接到你安装了 XRDP 的机器上,你首先需要在本地机器上安装一个 RDP 客户端。

我将使用 GNOME Boxes,它可以通过以下方式安装:

sudo apt install gnome-boxes

GNOME Boxes 更多的是以虚拟机使用而闻名,但它也支持其他各种协议,包括 XRDP。

如果由于某种原因你不想使用 Boxes,你也可以使用一个叫做 Remmina 的客户端。

sudo apt install remmina

不过,请注意,在本教程的其余部分,我将使用 Boxes。

首先,启动 GNOME Boxes,并点击 “+” 号,选择 “连接到远程计算机…”。

接下来,输入你要连接的机器的 IP 地址,前缀为 rdp://,然后按下图连接:

不确定你的 IP 地址是什么?

你可以用 ip address 命令找到你的 IP 地址。你需要寻找一个看起来像分成四组的数字的东西:

abhishek@its-foss:~$ ip address
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: wlp0s20f3: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether dc:46:b9:fb:7a:c5 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.107/24 brd 192.168.0.255 scope global dynamic noprefixroute  wlp0s20f3
valid_lft 6183sec preferred_lft 6183sec

避免任何名为 127.0.0.1 的 IP 地址,因为那个地址指向你运行命令的机器。输出中应该有更多的 IP 地址,如上图所示。

然后,你应该会看到一个登录页面。将“会话”设置为 “Xorg”,只需输入你的用户名和密码,然后点击 “OK”。

之后,你应该看到远程主机的桌面:

至此,一切都会像机器在你面前时一样表现。

故障排除:修复 XRDP 连接的主题问题

在我对 Ubuntu 20.04 的测试中,默认的 Yaru 主题似乎在连接时没有应用。这可以通过一些努力来解决。

首先,在远程计算机上运行这个命令:

sudo apt install gnome-tweaks gnome-shell-extensions dconf-editor -y

接下来,打开 “扩展” 应用,并打开如下开关:

接下来,关闭你的远程桌面会话并重新登录。现在,打开 Tweaks,按照下面的截图配置:

最后,打开 dconf 编辑器,并进入 /org/gnome/shell/extensions/dash-toock/。设置如下所示的值:

  • custom-theme-shrinkOn
  • dock-fixedOn
  • transparency-modeFIXED

总结

至此,一切都准备好了,可以做你需要做的事了。

如果有什么地方做得不太对,或者你有什么问题或意见,请在下面留言。我会尽力帮助你的。


via: https://itsfoss.com/xrdp-ubuntu/

作者:Hunter Wittenborn 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

不久前,识别硬件瓶颈还需要深厚的专业知识。今天的开源 GUI 性能监视器使它变得相当简单。

 title=

计算机是一个集成的系统,它的性能取决于最慢的硬件组件。如果一个组件的能力比其他组件差,性能落后而不能跟上,它就会拖累你的整个系统。这就是一个 性能瓶颈。消除一个严重的瓶颈可以使你的系统飞起来。

本文解释了如何识别 Linux 系统中的硬件瓶颈。这些技术同时适用于个人的电脑和服务器。我强调的是个人电脑 —— 我不会涉及局域网管理或数据库系统等领域的服务器特定的瓶颈。这些通常涉及专门的工具。

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

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

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

从哪里开始

一台计算机由六个关键的硬件资源组成。

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

如果任何一个资源表现不佳,就会产生一个性能瓶颈。为了识别瓶颈,你必须监测这六种资源。

开源提供了大量的工具来完成这项工作。我会使用 GNOME 系统监视器。它的输出很容易理解,而且你可以在大多数软件库中找到它。

启动它并点击“资源”标签。你可以马上发现许多性能问题。

 title=

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

在“资源”面板上显示三个部分:CPU 历史、内存和交换历史,以及网络历史。一眼就能看出你的处理器是否不堪负荷了,还是你的电脑没有内存了,抑或你的网络带宽被用光了。

我将在下面探讨这些问题。现在,当你的电脑速度变慢时,首先检查系统监视器。它可以立即为你提供最常见的性能问题的线索。

现在让我们来探讨一下如何识别特定方面的瓶颈。

如何识别处理器的瓶颈

要发现瓶颈,你必须首先知道你有什么硬件。开源为这个目的提供了几个工具。我喜欢 HardInfo,因为它的屏幕显示很容易阅读,而且广泛流行。

启动 HardInfo。它的“计算机->摘要”面板可以识别你的 CPU 并告诉你它的核心数、线程数和速度。它还能识别你的主板和其他计算机部件。

 title=

图 2. HardInfo 显示了硬件细节。(Howard Fosdick, CC BY-SA 4.0)

HardInfo 显示,这台计算机有一个物理 CPU 芯片。该芯片包含两个处理器(或称为核心)。每个核心支持两个线程(或称为逻辑处理器)。这就是总共四个逻辑处理器 —— 正是图 1 中系统监控器的 CPU 历史部分所显示的。

当处理器不能在其时间内对请求做出反应时,就会出现 处理器瓶颈,说明它们已经很忙了。

当系统监控器显示逻辑处理器的利用率持续在 80% 或 90% 以上时,你就可以确定这一点。这里有一个例子,四个逻辑处理器中有三个被淹没在 100% 的利用率中。这是一个瓶颈,因为它没有留下多少 CPU 用于其他工作。

 title=

图 3. 一个处理器的瓶颈。(Howard Fosdick, CC BY-SA 4.0)

哪个程序导致了这个问题?

你需要找出是哪个程序在消耗所有的 CPU。点击系统监视器的“进程”标签。然后点击“CPU 百分比”标头,根据它们消耗的 CPU 的多少对进程进行排序。你将看到哪些应用程序正在扼杀你的系统。

 title=

图 4. 识别违规的进程。(Howard Fosdick, CC BY-SA 4.0)

前三个进程各消耗了 总 CPU 资源的 24%。由于有四个逻辑处理器,这意味着每个进程消耗了一整个处理器。这就像图 3 所示。

在“进程”面板上,一个名为“analytical\_AI”的程序被确定为罪魁祸首。你可以在面板上右键单击它,以查看其资源消耗的更多细节,包括内存使用、它所打开的文件、其输入/输出细节,等等。

如果你的登录会话有管理员权限,你可以管理这个进程。你可以改变它的优先级,并停止、继续、结束或杀死它。因此,你可以在这里立即解决你的瓶颈问题。

 title=

图 5. 右键点击一个进程来管理它。(Howard Fosdick, CC BY-SA 4.0)

如何解决处理瓶颈问题?除了实时管理违规的进程外,你也可以防止瓶颈的发生。例如,你可以用另一个应用程序来代替违规进程,绕过它,改变你使用该应用程序的行为,将该应用程序安排在非工作时间,解决潜在的内存问题,对该应用程序或你的系统软件进行性能调整,或升级你的硬件。这里涉及的内容太多,所以我将在下一篇文章中探讨这些方式。

常见的处理器瓶颈

在用系统监控器监控你的 CPU 时,你会遇到几种常见的瓶颈问题。

有时一个逻辑处理器出现瓶颈,而其他所有的处理器都处于低利用率。这意味着你有一个应用程序,它的代码不够智能,无法利用一个以上的逻辑处理器,而且它已经把正在使用的那个处理器耗尽了。这个应用程序完成的时间将比使用更多的处理器要长。但另一方面,至少它能让你的其他处理器腾出手来做别的工作,而不会接管你的电脑。

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

最后,你可能会注意到,当你所有的处理器都陷入瓶颈时,你的内存也被完全利用了。内存不足的情况有时会导致处理器瓶颈。在这种情况下,你要解决的是根本的内存问题,而不是体现出症状的 CPU 问题。

如何识别内存瓶颈

鉴于现代 PC 中有大量的内存,内存瓶颈比以前要少得多。然而,如果你运行内存密集型程序,特别是当你的计算机没有很多的随机存取内存(RAM)时,你仍然可能遇到这些问题。

Linux 使用内存 既用于程序,也用于缓存磁盘数据。后者加快了磁盘数据的访问速度。Linux 可以在它需要的任何时候回收这些内存供程序使用。

系统监视器的“资源”面板显示了你的总内存和它被使用的程度。在“进程”面板上,你可以看到单个进程的内存使用情况。

下面是系统监控器“资源”面板中跟踪总内存使用的部分。

 title=

图 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%。很明显,它已经达到了性能极限,限制了你的系统完成工作的速度。

 title=

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

注意到其中一个 CPU 有 85% 的时间在等待磁盘完成它的工作(cpu001 w 85%)。这是典型的存储设备成为瓶颈的情况。事实上,许多人首先看 CPU 的 I/O 等待时间来发现存储瓶颈。

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

如何识别 USB 端口的瓶颈

有些人整天都在使用他们的 USB 端口。然而,他们从不检查这些端口是否被最佳地使用。无论你是插入外部磁盘、U 盘,还是其他东西,你都要确认你是否从 USB 连接的设备中获得了最大性能。

这个图表显示了原因。潜在的 USB 数据传输率差异 很大

 title=

图 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 防病毒更新。

 title=

图 9. Nethogs 识别带宽用户。(Howard Fosdick, CC BY-SA 4.0)

如何识别图形处理瓶颈

如果你把显示器插在台式电脑后面的主板上,你就在使用 板载显卡。如果你把它插在后面的卡上,你就有一个专门的图形子系统。大多数人称它为 视频卡显卡。对于台式电脑来说,附加显卡通常比主板上的显卡更强大、更昂贵。笔记本电脑总是使用板载显卡。

HardInfo 的“PCI 设备”面板告诉你关于你的图形处理单元(GPU)。它还显示你的专用视频内存的数量(寻找标有“可预取”的内存)。

 title=

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

 title=

图 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中国 荣誉推出

了解更多关于这个和其他两个未被充分利用但仍然有用的 Python 特性。

 title=

这是关于 Python 3.x 首发特性系列文章的第八篇。Python 3.7 于 2018 年首次发布,尽管它已经发布了几年,但它引入的许多特性都未被充分利用,而且相当酷。下面是其中的三个。

注解推迟评估

在 Python 3.7 中,只要激活了正确的 __future__ 标志,注解在运行时就不会被评估:

from __future__ import annotations

def another_brick(wall: List[Brick], brick: Brick) -> Education:
    pass
another_brick.__annotations__
    {'wall': 'List[Brick]', 'brick': 'Brick', 'return': 'Education'}

它使递归类型(指向自己的类)和其他有趣的事情成为了可能。然而,这意味着如果你想做自己的类型分析,你需要明确地使用 ast

import ast
raw_type = another_brick.__annotations__['wall']
[parsed_type] = ast.parse(raw_type).body
subscript = parsed_type.value
f"{subscript.value.id}[{subscript.slice.id}]"
    'List[Brick]'

itertools.islice 支持 index

Python 中的序列切片长期以来一直接受各种 类 int 对象(具有 __index__() 的对象)作为有效的切片部分。然而,直到 Python 3.7,itertools.islice,即核心 Python 中对无限生成器进行切片的唯一方法,才获得了这种支持。

例如,现在可以用 numpy.short 大小的整数来切片无限生成器:

import numpy
short_1 = numpy.short(1)
short_3 = numpy.short(3)
short_1, type(short_1)
    (1, numpy.int16)
import itertools
list(itertools.islice(itertools.count(), short_1, short_3))
    [1, 2]

functools.singledispatch() 注解注册

如果你认为 singledispatch 已经很酷了,你错了。现在可以根据注解来注册了:

import attr
import math
from functools import singledispatch

@attr.s(auto_attribs=True, frozen=True)
class Circle:
    radius: float
       
@attr.s(auto_attribs=True, frozen=True)
class Square:
    side: float

@singledispatch
def get_area(shape):
    raise NotImplementedError("cannot calculate area for unknown shape",
                              shape)

@get_area.register
def _get_area_square(shape: Square):
    return shape.side ** 2

@get_area.register
def _get_area_circle(shape: Circle):
    return math.pi * (shape.radius ** 2)

get_area(Circle(1)), get_area(Square(1))
    (3.141592653589793, 1)

欢迎来到 2017 年

Python 3.7 大约是四年前发布的,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将它们添加到你的工具箱中。


via: https://opensource.com/article/21/5/python-37-features

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Quarkus 受益于 20 多年的 Java 开发历史,使开发应用变得更快、更容易。

 title=

在云上发布服务部分是为了通过简单可靠的方式为用户和开发者提供对这些服务的便捷访问。与在线应用对接的最流行的方法之一是通过应用编程接口(API),这是一个花哨的术语,意味着你允许用户通过代码与你的应用进行互动。

API 的概念很重要,因为它可以帮助其他人在你的应用基础上进行开发。假设你设计了一个网站,当用户点击一个按钮时返回一个随机数字。通常情况下,这需要用户打开你的网站并点击一个按钮。网站可能是有用的,但只是在一定程度上。如果你包含一个 API,用户可以直接向你的服务器发送一个信号,要求一个随机数,或者他们可以自己编程,“调用”你的服务器来获取一个数字,而不需要点击或手动交互。开发者可以使用你的随机数作为游戏的数值,或作为密码生成器的一部分,或其他任何开发者需要随机数的地方(总是有的)。一个好的 API 可以解锁你的应用,让其他人使用你的代码结果,本质上,将你在网络上的工作转变为一个软件库。

什么是 Quarkus?

Quarkus 是一个原生 Kubernetes Java 栈,为无服务器应用交付而设计。与有 20 年历史的 Java 相比,Quarkus 相对年轻,但受益于这 20 年的发展,用该项目的话说,是 “超音速的亚原子 Java”。可能没有人知道这句话的确切含义,但你肯定可以通过一下午使用 Quarkus 来感受到它对你的开发生活的意义。

Quarkus 让你用一个有用的 API 开发应用,几乎不需要配置,也不用担心启动一个复杂的环境。你不需要学习关于云计算或边缘计算的所有知识,就可以学习并擅长使用 Quarkus。了解 Quarkus 可以使你的开发更快,它可以帮助你为现代计算机网络制作灵活的应用。

下面是我们最近的一些涉及 Quarkus 的文章。

开始使用 Quarkus

在 Saumya Singh 的《如何创建你的第一个 Quarkus 应用》中,你可以了解 Quarkus 和无服务器交付的好处,并在大约 10 分钟内创建了一个简单的演示应用。事实上,10 分钟以内更准确,因为在 Maven 和 Quarkus 之间,几乎没有你想象中的那么多设置。它几乎感觉不到像 Java 一样的坏处,而感觉像 Java 一样好。

边缘开发

Linux 是创建物联网 (IoT) 边缘应用 的一个流行平台。这有很多原因,包括安全性、编程语言和开发模型的广泛选择以及协议支持。不出所料,Quarkus 对物联网的处理非常好。Quarkus 的内存效率高,启动快,并且有快速的运行时,所以它不仅是物联网的可行解决方案,而且是理想的解决方案。你可以通过 Daniel Oh 的《在 Linux 上使用开源的边缘开发入门》来开始使用 Quarkus 和物联网。

Quarkus 和 VS Code

当你处理代码时,一个集成开发环境(IDE)会有很大的不同。微软的开源 VS Code(或无品牌标志的 VSCodium)是一个伪装成 IDE 的流行文本编辑器(或者说是伪装成文本编辑器的 IDE?),它有很多扩展,可以使它成为几乎任何编程语言的专门环境。如果你正在使用或考虑使用 VS Code,那么请阅读 Daniel Oh 的《Quarkus in VS Code》使用指南,了解一些关于 Maven、Quarkus 和 VS Code 如何协同工作的专业技巧。

获得 Quarkus

使用 Quarkus 开发,可以像 Python 一样简单地设置环境,但它为你提供了强大的 Java 语言及其众多的库。它是进入云计算、Knative 和边缘计算的一个重要入口。获取 Quarkus 并开始编码。


via: https://opensource.com/article/21/5/quarkus

作者:Alan Smithee 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出