在 RHEL 中调优系统性能

Red Hat Enterprise LinuxBeginner
立即练习

介绍

在这个实验(Lab)中,你将学习如何使用 tuned 优化 RHEL 系统的性能,以及如何使用 nicerenice 管理进程优先级。你将首先验证 tuned 的安装并列出可用的配置文件,然后观察更改 tuned 配置文件如何影响系统参数。

这个实验(Lab)将引导你启动和监控 CPU 密集型进程,然后使用 nicerenice 调整它们的优先级,以了解它们对资源分配的影响。最后,你将学习如何清理正在运行的进程,确保你完全理解在 RHEL 上进行性能调优。

验证 tuned 状态并列出可用配置文件

在这一步,你将学习如何验证 tuned 守护进程的状态,并列出 RHEL 系统上可用的调优配置文件。tuned 是一个动态自适应系统调优守护进程,它会调整系统设置,以优化特定工作负载的性能。它使用调优配置文件来应用一组系统范围的设置。

  1. 验证 tuned 守护进程是否正在运行。 在这个容器环境中,我们将通过查找 tuned 进程来检查 tuned 守护进程是否正在运行。我们还可以通过检查它是否响应命令来验证其功能。

    首先,检查 tuned 进程是否正在运行:

    pgrep tuned
    

    如果 tuned 正在运行,此命令将返回其进程 ID(PID)。如果没有返回 PID,你可以手动启动守护进程:

    sudo /usr/sbin/tuned &
    

    然后验证它是否正在运行:

    pgrep tuned
    

    你应该看到类似如下的输出:

    739
    

    (注意:你的输出中的 PID 值会有所不同。)

    此外,你可以通过检查 tuned 是否响应状态查询来验证其是否正常工作:

    sudo tuned-adm active
    

    这应该会返回当前活动的配置文件,且没有错误。

  2. 列出可用的调优配置文件并识别活动的配置文件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
    
  3. 查看 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
    
  4. 验证是否应用了 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 配置文件允许你快速应用一组针对不同工作负载(例如,吞吐量密集型任务或节能)量身定制的性能优化。

  1. **将当前活动调优配置文件更改为 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:
    
  2. 确认新的活动配置文件。 更改配置文件后,最好验证新的配置文件确实处于活动状态。你可以使用 tuned-adm active 来执行此操作。

    sudo tuned-adm active
    

    输出现在应该显示 throughput-performance 作为活动配置文件。

    Current active profile: throughput-performance
    
  3. 验证 vm.dirty_ratiovm.swappiness 参数是否已更改throughput-performance 配置文件修改与内存管理相关的内核参数,例如 vm.dirty_ratiovm.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 资源。在离开本练习或进入下一个实验之前,你必须终止所有练习进程。

  1. 确定系统上的 CPU 核心数量。 了解 CPU 核心的数量有助于你决定要运行多少个 CPU 密集型进程以充分利用系统。你可以在 /proc/cpuinfo 中找到此信息。

    grep -c '^processor' /proc/cpuinfo
    

    此命令计算以 processor 开头的行数,这对应于逻辑 CPU 核心(或虚拟处理器)的数量。

    2
    

    (注意:你的输出可能会显示不同的核心数量,具体取决于系统的配置。)

  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 值将与示例不同。)

  3. 验证后台作业是否正在运行jobs 命令列出当前从你的 shell 会话在后台运行的所有进程。

    jobs
    

    你应该看到你刚刚启动的 sha1sum 进程的列表。

    [1]   Running                 sha1sum /dev/zero &
    [2]   Running                 sha1sum /dev/zero &
    [3]   Running                 sha1sum /dev/zero &
    [4]-  Running                 sha1sum /dev/zero &
    
  4. 使用 pspgrep 命令显示每个 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 值。)

  5. 终止所有正在运行的 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 调整进程优先级

在这一步,你将学习如何使用 nicerenice 命令影响进程的调度优先级。进程的 nice 值(也称为 niceness)表示其对 Linux 调度程序的优先级。较低的 nice 值(更负数)表示较高的优先级,而较高的 nice 值(更正数)表示较低的优先级。nice 值的范围通常从 -20(最高优先级)到 19(最低优先级),默认值为 0。

  1. 启动多个 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 值将有所不同。)

  2. 使用 pspgrep 命令显示每个进程的 PID、CPU 使用率百分比、nice 值和可执行文件名。 观察 %CPUNI 列。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 的进程应该具有较低的份额。)

  3. 使用 sudo renice 命令将其中一个常规进程的 nice 级别更改为 5renice 命令允许你更改已运行进程的 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
    
  4. 重复 pspgrep 命令以显示 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 时间。)

清理正在运行的进程

在最后一步,你将确保在实验期间启动的所有后台进程都已正确终止。这是一个关键的清理步骤,以防止意外的资源消耗,并确保为将来的使用重置实验环境。

  1. 使用 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
    
  2. 验证没有 sha1sum 进程仍在运行。 你可以使用 pgrep 检查是否有任何 sha1sum 进程仍然处于活动状态。如果 pgrep 没有返回任何输出,则表示没有此类进程正在运行。

    pgrep sha1sum
    

    此命令应该不返回任何输出,表明所有 sha1sum 进程都已成功终止。

    $ pgrep sha1sum
    $
    

总结

在这个实验中,我们学习了如何在 RHEL 上管理和利用 tuned 进行系统性能优化。我们首先通过验证 tuned 服务的安装和状态以及列出可用的调优配置文件开始,了解到 tuned 使用这些配置文件动态地调整系统设置以适应特定的工作负载。然后,我们练习通过 SSH 以 labex 用户的身份登录到模拟的 servera 环境,并使用 dnf list tuned 确认了 tuned 软件包的安装。

该实验进一步指导我们更改 tuned 配置文件以观察它们对系统参数的影响,展示了不同的配置文件如何改变系统行为。我们还获得了启动和监控 CPU 密集型进程的实践经验,这对于识别性能瓶颈至关重要。最后,我们学习了使用 nicerenice 命令调整进程优先级以有效地管理资源分配,并通过清理正在运行的进程来将系统恢复到其初始状态。