介绍
在这个实验(Lab)中,你将学习如何使用 tuned 优化 RHEL 系统的性能,以及如何使用 nice 和 renice 管理进程优先级。你将首先验证 tuned 的安装并列出可用的配置文件,然后观察更改 tuned 配置文件如何影响系统参数。
这个实验(Lab)将引导你启动和监控 CPU 密集型进程,然后使用 nice 和 renice 调整它们的优先级,以了解它们对资源分配的影响。最后,你将学习如何清理正在运行的进程,确保你完全理解在 RHEL 上进行性能调优。
验证 tuned 状态并列出可用配置文件
在这一步,你将学习如何验证 tuned 守护进程的状态,并列出 RHEL 系统上可用的调优配置文件。tuned 是一个动态自适应系统调优守护进程,它会调整系统设置,以优化特定工作负载的性能。它使用调优配置文件来应用一组系统范围的设置。
验证
tuned守护进程是否正在运行。 在这个容器环境中,我们将通过查找tuned进程来检查tuned守护进程是否正在运行。我们还可以通过检查它是否响应命令来验证其功能。首先,检查
tuned进程是否正在运行:pgrep tuned如果
tuned正在运行,此命令将返回其进程 ID(PID)。如果没有返回 PID,你可以手动启动守护进程:sudo /usr/sbin/tuned &然后验证它是否正在运行:
pgrep tuned你应该看到类似如下的输出:
739(注意:你的输出中的 PID 值会有所不同。)
此外,你可以通过检查
tuned是否响应状态查询来验证其是否正常工作:sudo tuned-adm active这应该会返回当前活动的配置文件,且没有错误。
列出可用的调优配置文件并识别活动的配置文件。
tuned-adm list命令显示所有可用的调优配置文件,并突出显示当前活动的配置文件。sudo tuned-adm list系统将提示你输入密码。注意输出中的
Current active profile。Available profiles: - accelerator-performance - Throughput performance based tuning with disabled higher latency STOP states - aws - Optimize for aws ec2 instances - balanced - General non-specialized tuned profile - balanced-battery - Balanced profile biased towards power savings changes for battery - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - intel-sst - Configure for Intel Speed Select Base Frequency - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - optimize-serial-console - Optimize for serial console use. - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: virtual-guest查看
virtual-guest配置文件。virtual-guest配置文件通常是虚拟机的默认配置文件。你可以检查其配置文件,以了解它应用了哪些设置。cat /usr/lib/tuned/virtual-guest/tuned.conf此命令显示
virtual-guest配置文件的tuned配置,包括它从其他配置文件继承的参数。# ## tuned configuration # [main] summary=Optimize for running inside a virtual guest include=throughput-performance [vm] ## If a workload mostly uses anonymous memory and it hits this limit, the entire ## working set is buffered for I/O, and any more write buffering would require ## swapping, so it's time to throttle writes until I/O can catch up. Workloads ## that mostly use file mappings may be able to use even higher values. # ## The generator of dirty data starts writeback at this percentage (system default ## is 20%) dirty_ratio = 30 [sysctl] ## Filesystem I/O is usually much more efficient than swapping, so try to keep ## swapping low. It's usually safe to go even lower than this on systems with ## server-grade storage. vm.swappiness = 30验证是否应用了
vm.dirty_background_ratio参数。virtual-guest配置文件包含throughput-performance。让我们检查一个throughput-performance通常设置的参数,例如vm.dirty_background_ratio。此参数控制系统何时开始在后台将脏页写入磁盘。sysctl vm.dirty_background_ratio输出将显示此内核参数的当前值。
vm.dirty_background_ratio = 10
更改 tuned 配置文件并观察系统参数变化
在这一步,你将学习如何更改活动的 tuned 配置文件,并观察对系统参数的即时影响。更改 tuned 配置文件允许你快速应用一组针对不同工作负载(例如,吞吐量密集型任务或节能)量身定制的性能优化。
**将当前活动调优配置文件更改为
throughput-performance**。throughput-performance配置文件专为需要高吞吐量的系统而设计,通常会牺牲一些延迟。它通常针对磁盘 I/O 和网络性能进行优化。使用tuned-adm profile命令切换配置文件。sudo tuned-adm profile throughput-performance系统将提示你输入密码。
$ sudo tuned-adm profile throughput-performance [sudo] password for user:确认新的活动配置文件。 更改配置文件后,最好验证新的配置文件确实处于活动状态。你可以使用
tuned-adm active来执行此操作。sudo tuned-adm active输出现在应该显示
throughput-performance作为活动配置文件。Current active profile: throughput-performance验证
vm.dirty_ratio和vm.swappiness参数是否已更改。throughput-performance配置文件修改与内存管理相关的内核参数,例如vm.dirty_ratio和vm.swappiness。即使virtual-guest配置文件继承自throughput-performance,直接切换到throughput-performance配置文件也会应用基本值,而不会进行 virtual-guest 特定的修改。vm.dirty_ratio:此参数定义系统内存中可以被脏页(已修改但尚未写入磁盘的页面)填充的最大百分比,然后系统开始将它们写入磁盘。较高的值可以通过允许在内存中缓冲更多数据来提高吞吐量。vm.swappiness:此参数控制内核将匿名内存(应用程序数据)从 RAM 换出到交换空间的积极程度。较低的值意味着内核将尝试在 RAM 中保留更多应用程序数据,这通常对性能更好。
让我们使用
sysctl检查它们的当前值。sysctl vm.dirty_ratio sysctl vm.swappiness你应该观察到这些值已从
virtual-guest配置文件设置(dirty_ratio = 30,vm.swappiness = 30)更改为基本throughput-performance配置文件值:vm.dirty_ratio = 40 vm.swappiness = 10(注意:这些值反映了基本 throughput-performance 优化,没有 virtual-guest 特定的修改。)
在 RHEL 上启动并监控 CPU 密集型进程
在这一步,你将学习如何启动 CPU 密集型进程并监控它们的资源使用情况。这对于理解进程如何消耗系统资源以及如何识别瓶颈至关重要。我们将使用 sha1sum /dev/zero 命令,该命令持续计算无限的零流的 SHA1 校验和,从而有效地消耗 CPU 周期。
重要提示: 本练习使用在设备文件上执行无限校验和的命令,有意消耗大量的 CPU 资源。在离开本练习或进入下一个实验之前,你必须终止所有练习进程。
确定系统上的 CPU 核心数量。 了解 CPU 核心的数量有助于你决定要运行多少个 CPU 密集型进程以充分利用系统。你可以在
/proc/cpuinfo中找到此信息。grep -c '^processor' /proc/cpuinfo此命令计算以
processor开头的行数,这对应于逻辑 CPU 核心(或虚拟处理器)的数量。2(注意:你的输出可能会显示不同的核心数量,具体取决于系统的配置。)
为每个 CPU 核心启动两个
sha1sum /dev/zero &命令的实例。 为了模拟高负载系统,我们将启动多个sha1sum /dev/zero &的实例。命令末尾的&在后台运行该进程,允许你继续使用终端。例如,如果你有 2 个 CPU 核心,你将启动 4 个实例(2 个实例/核心 * 2 个核心)。for i in $(seq 1 $(grep -c '^processor' /proc/cpuinfo | awk '{print $1 * 2}')); do sha1sum /dev/zero & done此命令根据你的 CPU 核心数动态计算要启动的进程数。
[1] 1234 [2] 1235 [3] 1236 [4] 1237(注意:你的输出中的 PID 值将与示例不同。)
验证后台作业是否正在运行。
jobs命令列出当前从你的 shell 会话在后台运行的所有进程。jobs你应该看到你刚刚启动的
sha1sum进程的列表。[1] Running sha1sum /dev/zero & [2] Running sha1sum /dev/zero & [3] Running sha1sum /dev/zero & [4]- Running sha1sum /dev/zero &使用
ps和pgrep命令显示每个sha1sum进程的 CPU 使用率百分比。ps命令报告当前进程的快照。我们将把它与pgrep结合使用,以过滤sha1sum进程。ps -o pid,pcpu,nice,comm:这指定输出格式:进程 ID(pid)、CPU 使用率百分比(pcpu)、nice值(nice)和命令名称(comm)。$(pgrep sha1sum):此命令替换查找所有名为sha1sum的进程的 PID,并将它们作为参数传递给ps。
ps -o pid,pcpu,nice,comm $(pgrep sha1sum)你应该看到每个
sha1sum进程消耗了大量的 CPU 百分比。PID %CPU NI COMMAND 5248 48.8 0 sha1sum 5249 48.7 0 sha1sum 5250 48.8 0 sha1sum 5251 48.8 0 sha1sum(注意:
%CPU值可能会波动,但应该很高,表明 CPU 使用率很高。NI列显示 nice 值。)终止所有正在运行的
sha1sum进程并验证没有剩余进程。 在继续之前清理这些 CPU 密集型进程至关重要。pkill命令根据进程名称终止进程。pkill sha1sum现在,验证后台没有运行任何
sha1sum作业。jobs输出应该为空,或者指示所有作业已终止。
[1] Terminated sha1sum /dev/zero [2] Terminated sha1sum /dev/zero [3] Terminated sha1sum /dev/zero [4]- Terminated sha1sum /dev/zero(注意:你可能会看到“已终止”消息,这是预期的,因为进程正在停止。)
在 RHEL 上使用 nice 和 renice 调整进程优先级
在这一步,你将学习如何使用 nice 和 renice 命令影响进程的调度优先级。进程的 nice 值(也称为 niceness)表示其对 Linux 调度程序的优先级。较低的 nice 值(更负数)表示较高的优先级,而较高的 nice 值(更正数)表示较低的优先级。nice 值的范围通常从 -20(最高优先级)到 19(最低优先级),默认值为 0。
启动多个
sha1sum /dev/zero &实例,然后启动一个nice级别为 10 的附加实例。 我们将启动几个sha1sum进程来模拟繁忙的系统。然后,我们将启动一个具有故意较低优先级(较高nice值)的进程来观察效果。首先,启动三个常规实例(如果需要,根据你的 CPU 核心数进行调整,但至少要与虚拟处理器一样多以创建争用):
for i in {1..3}; do sha1sum /dev/zero & done接下来,启动第四个实例,其
nice级别为 10。与其他人相比,此进程将具有较低的优先级。nice -n 10 sha1sum /dev/zero &你将看到类似于此的输出,指示后台进程的 PID:
[1] 5443 [2] 5444 [3] 5445 [4] 5446(注意:你的输出中的 PID 值将有所不同。)
使用
ps和pgrep命令显示每个进程的 PID、CPU 使用率百分比、nice值和可执行文件名。 观察%CPU和NI列。nice值为 10 的实例应显示比其他实例更低的 CPU 使用率百分比,因为调度程序为其分配的 CPU 时间较少。ps -o pid,pcpu,nice,comm $(pgrep sha1sum)查找
NI值为10的进程。它的%CPU应该明显低于其他进程。PID %CPU NI COMMAND 5443 56.8 0 sha1sum 5444 58.0 0 sha1sum 5445 56.5 0 sha1sum 5446 6.7 10 sha1sum(注意:确切的
%CPU值将根据系统负载和核心数而变化,但nice 10的进程应该具有较低的份额。)使用
sudo renice命令将其中一个常规进程的nice级别更改为 5。renice命令允许你更改已运行进程的nice值。我们将通过将其中一个常规进程(nice 值为 0)更改为 nice 值为 5 来演示这一点。首先,从上一个
ps命令的输出中识别sha1sum进程之一的 PID,该进程的nice值为 0。让我们使用上面示例中的第一个进程(PID 5443)。sudo renice -n 5 <PID_of_regular_process>将
<PID_of_regular_process>替换为你标识的实际 PID。例如:sudo renice -n 5 5443你应该看到确认优先级更改的输出:
5443 (process ID) old priority 0, new priority 5重复
ps和pgrep命令以显示 CPU 百分比和nice级别。 观察你修改其nice值的进程的 CPU 使用率变化。与 nice 值为 0 的进程相比,nice 值为 5 的进程现在应该具有略低的 CPU 使用率,但高于 nice 值为 10 的进程。ps -o pid,pcpu,nice,comm $(pgrep sha1sum)你应该看到已修改进程的
NI值现在为5,并且其 CPU 使用率反映了其新的优先级级别。PID %CPU NI COMMAND 5443 55.4 5 sha1sum 5444 67.2 0 sha1sum 5445 67.1 0 sha1sum 5446 7.5 10 sha1sum(注意:确切的
%CPU值将有所不同,但你应该观察到具有较低 nice 值(较高优先级)的进程获得更多 CPU 时间。)
清理正在运行的进程
在最后一步,你将确保在实验期间启动的所有后台进程都已正确终止。这是一个关键的清理步骤,以防止意外的资源消耗,并确保为将来的使用重置实验环境。
使用
pkill命令终止所有名称模式为sha1sum的正在运行的进程。pkill命令是一种基于进程名称向进程发送信号(默认情况下为SIGTERM)的有效方法。这将停止你在前面步骤中启动的所有sha1sum进程。pkill sha1sum你可能会看到指示进程已被终止的消息。
[3]- Terminated sha1sum /dev/zero [2]- Terminated sha1sum /dev/zero [4]+ Terminated nice -n 10 sha1sum /dev/zero [1]+ Terminated sha1sum /dev/zero验证没有
sha1sum进程仍在运行。 你可以使用pgrep检查是否有任何sha1sum进程仍然处于活动状态。如果pgrep没有返回任何输出,则表示没有此类进程正在运行。pgrep sha1sum此命令应该不返回任何输出,表明所有
sha1sum进程都已成功终止。$ pgrep sha1sum $
总结
在这个实验中,我们学习了如何在 RHEL 上管理和利用 tuned 进行系统性能优化。我们首先通过验证 tuned 服务的安装和状态以及列出可用的调优配置文件开始,了解到 tuned 使用这些配置文件动态地调整系统设置以适应特定的工作负载。然后,我们练习通过 SSH 以 labex 用户的身份登录到模拟的 servera 环境,并使用 dnf list tuned 确认了 tuned 软件包的安装。
该实验进一步指导我们更改 tuned 配置文件以观察它们对系统参数的影响,展示了不同的配置文件如何改变系统行为。我们还获得了启动和监控 CPU 密集型进程的实践经验,这对于识别性能瓶颈至关重要。最后,我们学习了使用 nice 和 renice 命令调整进程优先级以有效地管理资源分配,并通过清理正在运行的进程来将系统恢复到其初始状态。



