监控和管理系统状态和性能
大约 136 分钟
监控和管理系统状态和性能
来源:官方文档 原始多页入口:监控和管理系统状态和性能 内容规模:约 139,537 字符,187 个章节标题,444 个命令/代码块,26 条提示框
阅读提要
- 副标题:优化系统吞吐量、延迟和电源消耗
- 摘要:使用用于性能优化的 TuneD、用于监控硬件和软件事件的 perf ,以及用于系统性能分析的 Performance Co-Pilot (PCP)等工具监控、分析和提高 RHEL 系统的性能。通过收集性能指标并为特定工作负载配置系统,来查看系统活动、日志和视觉化性能数据并调整关键设置,如磁盘调度程序和功耗。通过为实时 CPU 分析、分析内存分配、识别性能瓶颈、有效地管理功耗和检测问题(如错误共享)来提高系统效率。
- 主要章节:优化系统吞吐量、延迟和电源消耗;对红帽文档提供反馈;第 1 章 性能监控选项概述;第 2 章 使用 TuneD 优化系统性能;第 3 章 设置磁盘调度程序;第 4 章 配置 Performance Co-Pilot;第 5 章 配置 pmda-openmetrics;第 6 章 使用 pmlogger 记录性能数据;第 7 章 使用 Performance Co-Pilot 监控性能;第 8 章 配置 PCP 指标的图形表示;第 9 章 使用 PowerTOP 管理能耗;第 10 章 perf 入门
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
优化系统吞吐量、延迟和电源消耗
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 性能监控选项概述
- 要点:要监控和优化 Red Hat Enterprise Linux 系统的性能,您需要使用特定的工具。
- 要点:RHEL 提供多个命令行工具来监控运行级别 5 之外的系统。以下是内置命令行工具:
- 列表:Performance Co-Pilot (pcp)是一组用于监控、可视化、存储和分析系统级性能测量的工具。它支持监控和管理实时数据,以及记录和检索历史数据。
- 列表:RHEL 提供多个命令行工具来监控运行级别 5 之外的系统。以下是内置命令行工具: procps-ng 软件包提供以下工具: top 工具提供运行的系统中的进程的动态视图。它显示各种信息,包括系统摘要和当前由 Linux 内核管理的任务列表。 ps 工具捕获所选的活跃进程组的快照。默认情况下,检查组仅限于当前用户拥有的进程,并与运行 ps 命令的命令行相关联。 虚拟内存统计信息(vmstat)工具提供系统中进程、内存、分页、块输入/输出、中断和 CPU 活动的即时报告。 sysstat 软件包提供系统活动报告器(sar)工具,其收集和报告当天系统活动的信息。
- 列表:procps-ng 软件包提供以下工具: top 工具提供运行的系统中的进程的动态视图。它显示各种信息,包括系统摘要和当前由 Linux 内核管理的任务列表。 ps 工具捕获所选的活跃进程组的快照。默认情况下,检查组仅限于当前用户拥有的进程,并与运行 ps 命令的命令行相关联。 虚拟内存统计信息(vmstat)工具提供系统中进程、内存、分页、块输入/输出、中断和 CPU 活动的即时报告。
- 列表:top 工具提供运行的系统中的进程的动态视图。它显示各种信息,包括系统摘要和当前由 Linux 内核管理的任务列表。
- 列表:ps 工具捕获所选的活跃进程组的快照。默认情况下,检查组仅限于当前用户拥有的进程,并与运行 ps 命令的命令行相关联。
- 列表:虚拟内存统计信息(vmstat)工具提供系统中进程、内存、分页、块输入/输出、中断和 CPU 活动的即时报告。
第 2 章 使用 TuneD 优化系统性能
- 要点:TuneD 是一个系统调优服务,旨在通过使用预定义的或自定义配置文件优化系统性能和功耗。它包括用于不同工作负载(如高吞吐量、低延迟和节能)的预定义配置文件。
2.1. RHEL 提供的调优配置文件
- 要点:在安装过程中,TuneD 会自动根据系统类型选择最合适的配置文件。例如,为计算节点选择了 throughput-performance,虚拟机为 virtual-guest,以及对常规系统进行平衡。这样可确保环境的最佳性能。
- 要点:配置文件主要分为两类:
- 列表:节能配置文件,其降低了功耗,同时对性能影响最小
- 列表:性能提升配置文件,其优化系统资源,来提高速度和响应。
- 命令/配置摘录:
# tuned-adm profile throughput-performance optimize-serial-console
# tuned-adm profile cpu-partitioning intel-sst- 注意:注意 在某些情况下,balanced 配置文件比 powersave 更高效。对于视频转码等任务,以全电方式运行速度更快。它还可让系统进入空闲状态并更早切换到高效的节能模式。节流机器可减少任务过程中的功率,但扩展了其持续时间,这可能会增加整体能源使用。因此,balanced 配置文件通常是更好的选择。
2.2. RHEL 提供的实时 TuneD 配置文件
- 要点:RHEL 为一些运行实时内核的系统提供了专门的配置文件。如果没有特殊的内核构建,则不会将系统配置为实时。在 RHEL 中,配置文件可在额外的存储库中提供。
2.3. 安装并启用 TuneD
- 要点:作为系统管理员,使用 TuneD 来针对各种用例优化性能配置集。您必须安装并启用 TuneD 才能开始使用它。
- 要点:安装 TuneD 后,/usr/lib/tuned/profiles 目录会存储特定于发行版的配置集。每个配置文件存储在其自己的子目录中。该配置文件包括名为 tuned.conf 的配置文件,以及其他文件,如帮助程序脚本。另外,要自定义配置文件,请将配置文件目录复制到 /etc/tuned/profiles ,其存储与自定义配置文件相关的文件。如果存在具有相同名称的配置文件,则位于 /etc/tuned/profiles 中的自定义配置文件具有优先权。
- 列表:您有管理特权。
- 列表:安装 TuneD 软件包: # dnf install tuned
- 列表:启用并启动 TuneD 服务: # systemctl enable --now tuned
- 列表:可选:为实时系统安装 TuneD 配置文件: 对于实时系统的 TuneD 配置文件,请启用 rhel-10 存储库。 # subscription-manager repos --enable=rhel-10-for-x86_64-nfv-beta-rpms # dnf install tuned-profiles-realtime tuned-profiles-nfv
- 列表:检查配置集的激活状态: $ tuned-adm active Current active profile: throughput-performance
- 列表:检查配置集是否活跃并应用: $ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
- 命令/配置摘录:
# dnf install tuned
# systemctl enable --now tuned2.4. 管理 TuneD 配置文件
- 要点:您可以在 Red Hat Enterprise Linux 中管理 TuneD 配置集,包括列出可用配置集、设置特定配置集以及根据需要禁用 TuneD。正确管理配置文件可优化特定工作负载的系统性能,如对低延迟应用程序使用 cpu-partitioning 配置文件。
- 要点:先决条件
- 列表:您已安装并启用了 TuneD。
- 列表:您有管理特权。
- 列表:列出所有可用的预定义的 TuneD 配置文件: $ tuned-adm list
- 列表:可选:要让 TuneD 为您的系统推荐最合适的配置文件,请使用以下命令: # tuned-adm recommend throughput-performance
- 列表:激活配置文件: # tuned-adm profile selected-profile 另外,您可以激活多个配置文件的组合: # tuned-adm profile selected-profile1 selected-profile2
- 列表:查看系统上当前活跃的 TuneD 配置文件: # tuned-adm active Current active profile: selected-profile
- 命令/配置摘录:
$ tuned-adm list
# tuned-adm recommend2.5. 配置文件继承和用于配置文件自定义的变量
- 要点:TuneD 支持配置文件继承、变量使用和内置函数来有效地创建新或修改现有配置文件。
- 要点:预安装的和自定义配置文件在以下目录中:
- 列表:预安装的配置文件:在 /usr/lib/tuned/profiles/ 中
- 列表:自定义配置文件:在 /etc/tuned/profiles/ 中创建 配置文件继承 TuneD 配置文件可以使用 [main] 部分中的 include 选项继承其他配置文件的设置。配置集继承意味着 Child 配置集继承父设置,但可以覆盖或添加用于自定义要求的参数。例如,要基于 balanced 配置集创建一个配置集,其额外将 ALPM 设置为 min_power 而不是 medium_power,请使用: [main] include=balanced [scsi_host] alpm=min_power 自定义配置文件时变量的用法 您可以在自定义配置文件时定义变量。变量通过减少重复定义简化配置。通过在配置集中创建 [vari…
- 命令/配置摘录:
[main] include=balanced [scsi_host] alpm=min_power
[variables] variable_name=value2.6. 用于配置文件自定义的内置函数
- 要点:当配置文件激活时,您可以在 TuneD 配置文件中使用内置函数,来在运行时动态扩展。将内置函数与 TuneD 变量一起使用,来在配置文件中动态修改和处理值。
- 要点:您可以通过创建并集成自定义 Python 功能作为插件,使用自定义功能扩展 TuneD。
- 命令/配置摘录:
${f:function_name:argument_1:argument_2}
${i:PROFILE_DIR}- 表格样本(共 26 行):
- 函数名称 | 描述
- assertion | 比较两个参数。如果不匹配,函数会从第一个参数中记录文本,并取消配置集加载。
- assertion_non_equal | 比较两个参数。如果匹配,该函数会记录来自第一个参数的文本,并取消配置集加载。
- calc_isolated_cores | 计算并返回隔离的核。参数指定要为内务保留的每个插槽的核数。如果没有指定,则为内务保留每个插槽一个核,其余的被隔离。
2.7. TuneD 插件
- 要点:TuneD 配置文件使用插件来监控或优化系统上的不同设备。
- 要点:TuneD 使用两种类型的插件:
- 列表:使用 TuneD 调度程序插件优化 CPU 调度(红帽知识库)
2.8. 创建一个新的 TuneD 配置文件
- 要点:您可以创建一个新的 TuneD 配置集来自定义性能优化的要求。
- 要点:先决条件
- 列表:TuneD 服务正在运行。详情请参阅 安装和启用 TuneD。
- 列表:在 /etc/tuned/profiles 目录中,创建一个名称与您要创建的配置文件相同的新目录: # mkdir /etc/tuned/profiles/my-profile
- 列表:在新目录中,创建名为 tuned.conf 的文件。
- 列表:编辑该文件,并根据您的要求在定义中添加 [main] 部分并插入。例如,查看 balanced 配置文件的配置: [main] summary=General non-specialized TuneD profile [cpu] governor=conservative energy_perf_bias=normal [audio] timeout=10 [video] radeon_powersave=dpm-balanced, auto [scsi_host] alpm=medium_power
- 列表:激活配置文件。 # tuned-adm profile my-profile
- 列表:查看配置文件是否活跃且已应用: $ tuned-adm active Current active profile: my-profile $ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
- 命令/配置摘录:
# mkdir /etc/tuned/profiles/my-profile
[main] summary=General non-specialized TuneD profile [cpu] governor=conservative energy_perf_bias=normal [audio] timeout=10 [video] radeon_powersave=dpm-balanced, auto [scsi_host] alpm=medium_power2.9. 修改现有 TuneD 配置文件
- 要点:您可以修改现有配置集的参数以符合您的自定义要求。可以根据现有的 TuneD 配置文件创建修改的子配置文件。
- 要点:先决条件
- 列表:TuneD 服务正在运行。详情请参阅 安装和启用 TuneD。
- 列表:在 /etc/tuned/profiles 目录中,创建一个名称与您要创建的配置文件相同的新目录: # mkdir /etc/tuned/profiles/modified-profile
- 列表:在新目录中,创建一个名为 tuned.conf 的文件,并将 [main] 部分设置为如下: [main] include=parent-profile 使用您要修改的配置集的名称替换 parent-profile,例如: throughput-performance
- 列表:包括您的配置文件修改。例如,要降低 throughput-performance 配置文件中的 swappiness,请将 vm.swappiness 的值改为 5,而不是默认的 10,请使用: [main] include=throughput-performance [sysctl] vm.swappiness=5
- 列表:激活配置文件。 # tuned-adm profile modified-profile
- 列表:查看配置文件是否活跃且已应用: $ tuned-adm active Current active profile: modified-profile $ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
- 命令/配置摘录:
# mkdir /etc/tuned/profiles/modified-profile
[main] include=parent-profile2.10. 启用 TuneD no-daemon 模式
- 要点:您可以在 no-daemon 模式下运行 TuneD,它不需要任何常驻内存。在此模式下,TuneD 应用设置,然后退出。但请注意,这个模式禁用某些功能,包括 D-Bus 和热插支持,以及设置的回滚功能。
- 要点:先决条件
- 列表:您有 root 权限或合适的权限来修改系统配置。
- 列表:使用以下更改编辑 /etc/tuned/tuned-main.conf 文件: sudo vi /etc/tuned/tuned-main.conf daemon = 0
- 列表:保存并关闭该文件。
- 列表:重启 tuned 服务或重新应用或切换配置文件: # systemctl restart tuned # tuned-adm profile <tuned_profile>
- 列表:验证 tuned 状态: # tuned-adm active It seems that tuned daemon is not running, preset profile is not activated. Preset profile: <tuned_profile>
- 命令/配置摘录:
sudo vi /etc/tuned/tuned-main.conf
daemon = 02.11. 其他资源
- 列表:TuneD 文档
第 3 章 设置磁盘调度程序
- 要点:磁盘调度程序负责对提交至存储设备的 I/O 请求进行排序。您可以通过几种不同方式配置调度程序:
- 列表:使用 TuneD 设置调度程序。
- 列表:使用 udev 设置调度程序。
- 列表:临时更改正在运行的系统上的调度程序。
- 注意:注意 在 Red Hat Enterprise Linux 中,块设备只支持多队列调度。这可让块层性能针对使用快速固态驱动器(SSD)和多核系统进行正常扩展。
3.1. 可用磁盘调度程序
- 要点:选择适当的磁盘调度程序会显著影响系统性能、响应速度和 I/O 操作效率。评估每个调度程序的特征,以为您的特定工作负载和硬件选择最合适的选项。
- 要点:Red Hat Enterprise Linux 支持以下多队列磁盘调度程序:
- 注意:注意 具体来说,对于 non-volatile Memory Express(NVMe)块设备,默认调度程序为 none,红帽建议不要更改它。
3.2. 不同用例的磁盘调度程序
- 要点:在执行分析和调整之前,请使用这些磁盘调度程序作为起点。
- 表格样本(共 5 行):
- 使用案例 | 磁盘调度程序
- 传统的使用 SCSI 接口的 HDD | 使用 mq-deadline 或 bfq。
- 高性能 SSD 或具有快速存储的 CPU 绑定系统 | 使用 none,特别是在运行企业级应用程序时。或者,使用 kyber。
- 桌面或互动任务 | 使用 bfq。
3.3. 确定活跃磁盘调度程序
- 要点:您可以查看当前在给定块设备上活跃的磁盘调度程序。
- 要点:流程
- 列表:读取 /sys/block/device/queue/scheduler 文件的内容: # cat /sys/block/device/queue/scheduler [mq-deadline] kyber bfq none 在文件名中,将 device 替换为块设备名称,如 sdc。活跃的调度程序列在方括号中 ([ ]) 。
- 命令/配置摘录:
# cat /sys/block/device/queue/scheduler
[mq-deadline] kyber bfq none3.4. 使用 TuneD 设置磁盘调度程序
- 要点:您可以创建并启用一个 TuneD 配置文件,其为所选块设备设置一个给定的磁盘调度程序。这个设置会在系统重启后保留。
- 要点:在创建 TuneD 配置集来设置磁盘调度程序时,替换:
- 列表:使用块设备的名称(如 sdf)替换 device
- 列表:使用您要为设备设置的磁盘调度程序(如 bfq)替换 selected-scheduler 。
- 列表:TuneD 服务已安装并已启用。详情请参阅安装和启用 TuneD。
- 列表:可选:选择一个您的配置集将基于的现有 TuneD 配置文件。有关可用配置集列表,请参阅 RHEL 提供的 TuneD 配置集。
- 列表:要查看哪个配置文件当前处于活跃状态,请使用: # tuned-adm active
- 列表:创建一个新目录来保存 TuneD 配置文件: # mkdir /etc/tuned/profiles/<new_profile>
- 命令/配置摘录:
# tuned-adm active
# mkdir /etc/tuned/profiles/<new_profile>- 注意:注意 此命令返回作为 World Wide Name (WWN)或与指定块设备关联的序列号的所有值。虽然首选使用 WWN,但并不始终适用于所有设备。在这种情况下,您可以使用 example 命令返回的任何值作为设备系统的唯一 ID。
3.5. 使用 udev 规则设置磁盘调度程序
- 要点:您可以使用 udev 规则为特定的块设备设置给定的磁盘调度程序。这个设置会在系统重启后保留。
- 要点:在配置 udev 规则来设置磁盘调度程序时,替换:
- 列表:使用块设备的名称(如 sdf)替换 device
- 列表:使用您要为设备设置的磁盘调度程序(如 bfq)替换 selected-scheduler 。
- 列表:查找块设备系统唯一标识符: # $ udevadm info --name=/dev/device | grep -E '(WWN|SERIAL)' E: ID_WWN=0x5002538d00000000 E: ID_SERIAL=Generic-_SD_MMC_20120501030900000-0:0 E: ID_SERIAL_SHORT=20120501030900000 注意 此命令返回作为 World Wide Name (WWN)或与指定块设备关联的序列号的所有值。虽然首选使用 WWN,但并不始终适用于所有设备。在这种情况下,您可以使用 example 命令返回的任何值作为设备系统的唯一 ID。
- 列表:要配置 udev 规则,请使用以下内容创建 /etc/udev/rules.d/99-scheduler.rules 文件: ACTION=="add|change", SUBSYSTEM=="block", ENV{IDNAME}=="device system unique id", ATTR{queue/scheduler}="selected-scheduler" 在这里: 使用要使用的标识符的名称替换 IDNAME (如 ID_WWN)。 将设备系统唯一 id 替换为所选标识符的值(如 0x5002538d00000000)。
- 列表:使用要使用的标识符的名称替换 IDNAME (如 ID_WWN)。
- 列表:将设备系统唯一 id 替换为所选标识符的值(如 0x5002538d00000000)。
- 命令/配置摘录:
# $ udevadm info --name=/dev/device | grep -E '(WWN|SERIAL)'
E: ID_WWN=0x5002538d00000000 E: ID_SERIAL=Generic-_SD_MMC_20120501030900000-0:0 E: ID_SERIAL_SHORT=20120501030900000- 注意:注意 此命令返回作为 World Wide Name (WWN)或与指定块设备关联的序列号的所有值。虽然首选使用 WWN,但并不始终适用于所有设备。在这种情况下,您可以使用 example 命令返回的任何值作为设备系统的唯一 ID。
3.6. 为特定磁盘临时设置调度程序
- 要点:您可以为特定的块设备设置给定的磁盘调度程序。系统重启后该设置不会保留。
- 要点:流程
- 列表:将所选调度程序的名称写到 /sys/block/device/queue/scheduler 文件中: # echo selected-scheduler > /sys/block/device/queue/scheduler 在文件名中,将 device 替换为块设备名称,如 sdc。
- 列表:验证调度程序是否在设备上处于活跃状态。 # cat /sys/block/device/queue/scheduler
- 命令/配置摘录:
# echo selected-scheduler > /sys/block/device/queue/scheduler
# cat /sys/block/device/queue/scheduler第 4 章 配置 Performance Co-Pilot
- 要点:Performance Co-Pilot (PCP)是用于管理和衡量系统级别性能的工具、服务和库的组合。您可以使用 Python、Perl、C++ 和 C 接口来添加性能指标。
- 要点:分析工具直接使用 Python、C++ 和 C 客户端 API。Web 应用可以通过 JSON 界面访问性能数据。要分析数据模型,请使用存档数据进行实时结果。
- 列表:轻量级分布式架构在复杂系统的集中分析中非常有用。
- 列表:监控和管理实时数据的能力。
- 列表:记录和检索历史数据的能力。
- 列表:Performance Metric Collector Daemon (pmcd)从安装的 Performance Metric Domain Agents(PMDA)收集性能数据。PMDA 可以在系统上单独加载或卸载,并由同一主机上的 PMCD 控制。
- 列表:pminfo 或 pmstat 等各种客户端工具可以检索、显示、存档和处理同一主机或网络上的此数据。
- 列表:pcp 和 pcp-system-tools 软件包提供了命令行工具和核心功能。
4.1. 安装并启用 PCP
- 要点:安装所需的软件包,并启用 PCP 监控服务来开始使用它。您还可以使用 pcp-zeroconf 软件包自动化 PCP 安装。有关使用 pcp-zeroconf 安装 PCP 的更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 要点:流程
- 列表:安装 pcp 软件包: # dnf install pcp
- 列表:在主机机器上启用并启动 pmcd 服务: # systemctl enable pmcd # systemctl start pmcd
- 列表:验证 PMCD 进程是否在主机上运行: # pcp Performance Co-Pilot configuration on arm10.local: platform: Linux arm10.local 6.12.0-55.13.1.el10_0.aarch64 #1 SMP PREEMPT_DYNAMIC Mon May 19 07:29:57 UTC 2025 aarch64 hardware: 4 cpus, 1 disk, 1 node, 3579MB RAM timezone: JST-9 services: pmcd pmcd: Version 6.3.7-1, 12 agents, 6 clients…
- 列表:系统服务和使用 PCP 分发的工具
- 命令/配置摘录:
# dnf install pcp
# systemctl enable pmcd4.2. PCP 归档轮转、压缩和比较
- 要点:Performance Co-Pilot (PCP) 将收集的指标存储在归档文件中,用于历史性能分析。为管理存储并简化长期保留,PCP 每天轮换和压缩归档。比较不同时期的存档性能数据,以确定系统行为的变化。
- 要点:PCP 每天使用 pmlogger_daily 工具轮转本地存档,该工具通常在 pmlogger_daily.timer systemd 单元的午夜后不久启动。在每天处理过程中,PCP 会轮转活跃的存档,可以选择合并已完成的每日存档,并压缩旧的归档卷来减少磁盘空间使用量。pmlogcompress 实用程序根据 pmlogger 控制配置中的设置执行存档压缩。
- 列表:系统服务和使用 PCP 分发的工具
4.3. 部署最少的配置以归档收集的指标
- 要点:您可以使用最小 pmlogger 配置将 PCP 配置为归档本地系统上收集的性能指标。系统将这些存档存储在 /var/log/pcp/pmlogger/ 下。您可以使用 PCP 工具(如 pmlogsummary 和 pmdiff )分析存档。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:通过 reprobing 针对本地 pmcd 实例更新 pmlogger 配置: # pmlogconf -r /var/lib/pcp/config/pmlogger/config.default pmlogconf 可能会提示启用或禁用相关指标组。接受最小配置的默认值,或者只启用您需要的组。
- 列表:启动或重启 pmlogger 服务以应用更新的配置: # systemctl restart pmlogger.service
- 列表:可选:如果 pmlogger 尚未运行,请启动它。 # systemctl start pmlogger.service
- 列表:验证 pmlogger 是否在编写存档。列出本地主机的归档目录: $ ls -l /var/log/pcp/pmlogger/$(hostname)/ 输出示例: -rw-r--r--. 1 pcp pcp 1899948 May 27 12:55 20260527.11.59.0 -rw-r--r--. 1 pcp pcp 1640 May 27 12:54 20260527.11.59.index -rw-r--r--. 1 pcp pcp 339929 May 27 12:54 20260527.11.59.meta lrwxrwxrwx. 1 pcp pcp 375 May 27 11:59 Latest -rw-r--r…
- 列表:总结当前存档的指标,以确认数据已被记录。使用上一步中的归档基础名称: $ pmlogsummary /var/log/pcp/pmlogger/$(hostname)/20260527.11.59 -a disk.dev.read disk.dev.write 输出示例: Log Label (Log Format Version 3) Performance metrics from host hostname.example.com commencing Tue May 27 11:59:00.000 2026 ending Tue May 27 12:55:00.000 2026 disk.dev.read ["sda"…
- 命令/配置摘录:
# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
# systemctl restart pmlogger.service4.4. 系统服务和使用 PCP 分发的工具
- 要点:基本软件包 pcp 包括系统服务和基本工具。您可以安装由 pcp-system-tools、pcp-gui 和 pcp-devel 软件包提供的其他工具。
- 要点:PCP 分发的系统服务的角色
4.5. PCP 部署架构
- 要点:PCP 根据 PCP 部署的规模支持多个部署架构,并提供许多选项来完成高级配置。
- 要点:可用的扩展部署配置变体(根据调整因素和配置选项决定),包括:
- 注意:注意 默认情况下,Valkey 的部署配置是单机的 localhost。但是,Valkey 可以选择以高可用性和高度可扩展的集群方式执行,其中数据在多个主机之间共享。另一种选择是在云中部署 Valkey 集群,或者使用云提供商提供的受管 Valkey 集群。
4.6. 影响 PCP 日志记录扩展的因素
- 要点:影响 Performance Co-Pilot (PCP)日志记录的关键因素是硬件资源、日志记录的指标、日志记录间隔和升级后归档管理。
4.7. 其他资源
- 列表:系统服务和使用 PCP 分发的工具
- 列表:红帽客户门户网站中的 Performance Co-Pilot (PCP)文章、解决方案、教程和白皮书的索引
第 5 章 配置 pmda-openmetrics
- 要点:Performance Co-Pilot (PCP)是一个用于监控和管理系统性能的系统。它包括几个内置代理,称为 Performance Metric Domain Agents (PMDA)。这些代理从应用程序和服务收集指标,如 PostgreSQL、Apache HTTPD 和 KVM 虚拟机。
5.1. pmda-openmetrics 概述
- 要点:您可以运行红帽仓库中没有开箱即用的 PMDA 的自定义或不太常见的应用程序。在这种情况下,pmda-openmetrics 代理通过将 OpenMetrics 风格的文本文件转换为与 PCP 兼容的指标,从任意应用程序公开性能指标。
- 要点:OpenMetrics 是 Prometheus 和其他监控工具广泛采用的格式,其使集成更加容易。您可以运行 pmda-openmetrics 来执行以下任务:
- 列表:监控未被现有 PMDA 涵盖的自定义应用程序。
- 列表:将现有的 OpenMetrics 或 Prometheus 导出的 指标集成到 PCP 框架中。
- 列表:创建快速模型或测试指标,来诊断或演示目的。
5.2. 安装和配置 pmda-openmetrics
- 要点:您必须开始使用它之前安装并配置 pmda-openmetrics。以下示例演示了如何使用 pmda-openmetrics 将文本文件中的一个数字值公开为一个 PCP 指标。
- 要点:先决条件
- 列表:PCP 已安装且 pmcd 正在运行。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:安装 pmda-openmetrics PMDA。 # dnf -y install pcp-pmda-openmetrics # cd /var/lib/pcp/pmdas/openmetrics/ # ./Install
- 列表:创建一个 OpenMetrics 示例文件。 # echo 'var1 {var2="var3"} 42' > /tmp/example.txt 将 示例.txt 替换为您要使用的文件名。
- 列表:验证文件是否已正确创建。 # cat /tmp/example.txt
- 列表:使用 OpenMetrics 代理注册指标文件路径。 # echo "file:///tmp/example.txt" > /etc/pcp/openmetrics/example.url
- 列表:验证配置是否已正确创建。 # cat /etc/pcp/openmetrics/example.url
- 命令/配置摘录:
# dnf -y install pcp-pmda-openmetrics
# cd /var/lib/pcp/pmdas/openmetrics/第 6 章 使用 pmlogger 记录性能数据
- 要点:使用 PCP 工具,您可以记录性能指标值并稍后重新显示。您可以使用此数据来执行改进性能分析。使用 pmlogger 工具,您可以:
- 列表:在系统上创建所选指标的归档日志
- 列表:指定系统中记录哪些指标以及它们的频率
6.1. 使用 pmlogconf 修改 pmlogger 配置文件
- 要点:当 pmlogger 服务运行时,PCP 会记录主机上一组默认指标。使用 pmlogconf 实用程序检查默认配置。如果 pmlogger 配置文件不存在,则 pmlogconf 会使用默认指标值创建该文件。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:创建或修改 pmlogger 配置文件: # pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
- 列表:按照 pmlogconf 提示启用或禁用相关性能指标组,并控制每个启用的组的日志间隔。例如, # pmlogconf -r /var/lib/pcp/config/pmlogger/config.default Group: per logical block device activity Log this group? [y] Logging interval? [default]
- 列表:系统服务和使用 PCP 分发的工具
- 命令/配置摘录:
# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default6.2. 手动配置 pmlogger
- 要点:您可以手动编辑 pmlogger 配置文件,以使用特定指标和间隔创建定制的日志记录配置。默认配置文件为 /var/lib/pcp/config/pmlogger/config.default,用于指定由主日志记录实例记录的指标。
- 要点:使用手动 pmlogger 配置,您可以:
- 列表:记录没有列在自动配置中的指标。
- 列表:选择自定义日志记录频率。
- 列表:使用应用程序指标添加 PMDA。
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:打开并编辑 /var/lib/pcp/config/pmlogger/config.default 文件以添加特定的指标: # It is safe to make additions from here on ... # log mandatory on every 5 seconds { xfs.write xfs.write_bytes xfs.read xfs.read_bytes } log mandatory on every 10 seconds { xfs.allocs xfs.block_map xfs.transactions xfs.log } [access] disallow * : al…
- 列表:系统服务和使用 PCP 分发的工具
- 命令/配置摘录:
# It is safe to make additions from here on ... # log mandatory on every 5 seconds { xfs.write xfs.write_bytes xfs.read xfs.read_bytes } log mandatory on every 10 seconds { xfs.allocs xfs.block_map xfs.transactions xfs.log } [access] disallow * : all; allow localhost : enquire;6.3. 启用 pmlogger 服务
- 要点:必须启动并启用 pmlogger 服务,以记录本地计算机上的指标值。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:启动并启用 pmlogger 服务: # systemctl start pmlogger # systemctl enable pmlogger
- 列表:验证 pmlogger 服务是否已启用: # pcp platform: Linux arm10.local 6.12.0-55.13.1.el10_0.aarch64 #1 SMP PREEMPT_DYNAMIC Mon May 19 07:29:57 UTC 2025 aarch64 hardware: 4 cpus, 1 disk, 1 node, 3579MB RAM timezone: JST-9 services: pmcd pmcd: Version 6.3.7-1, 12 agents, 6 clients pmda: root pmcd proc pmproxy xfs linux nfsclient…
- 列表:系统服务和使用 PCP 分发的工具
- 命令/配置摘录:
# systemctl start pmlogger
# systemctl enable pmlogger6.4. 为指标集合配置客户端系统
- 要点:您可以配置一个客户端系统,使中央服务器可以从运行 PCP 的客户端中收集性能指标。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:安装 pcp-system-tools 软件包: # dnf install pcp-system-tools
- 列表:为 pmcd 配置 IP 地址: # echo "-i 192.168.4.62" >>/etc/pcp/pmcd/pmcd.options 使用客户端应侦听的 IP 地址替换 192.168.4.62。默认情况下,pmcd 侦听 localhost。
- 列表:配置防火墙来永久添加 public 区域: # firewall-cmd --permanent --zone=public --add-port=44321/tcp success # firewall-cmd --reload success
- 列表:设置 SELinux 布尔值: # setsebool -P pcp_bind_all_unreserved_ports on
- 列表:启用 pmcd 和 pmlogger 服务: # systemctl enable pmcd pmlogger # systemctl restart pmcd pmlogger
- 命令/配置摘录:
# dnf install pcp-system-tools
# echo "-i 192.168.4.62" >>/etc/pcp/pmcd/pmcd.options6.5. 配置中央服务器以收集数据
- 要点:您可以创建一个中央服务器,来从运行 PCP 的客户端中收集指标。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:为指标集合配置了客户端。如需更多信息,请参阅为指标集合配置客户端系统。
- 列表:安装 pcp-system-tools 软件包: # dnf install pcp-system-tools
- 列表:使用以下内容创建 /etc/pcp/pmlogger/control.d/remote 文件: # DO NOT REMOVE OR EDIT THE FOLLOWING LINE $version=1.1 192.168.4.13 n n PCP_ARCHIVE_DIR/rhel7u4a -r -T24h10m -c config.rhel7u4a 192.168.4.14 n n PCP_ARCHIVE_DIR/rhel6u10a -r -T24h10m -c config.rhel6u10a 192.168.4.62 n n PCP_ARCHIVE_DIR/rhel8u1a -r -T24h10m -c config.rhe…
- 列表:启用 pmcd 和 pmlogger 服务: # systemctl enable pmcd pmlogger # systemctl restart pmcd pmlogger
- 列表:验证您是否可以从每个目录中访问最新的归档文件: # for i in /var/log/pcp/pmlogger/rhel*/*.0; do pmdumplog -L $i; done Log Label (Log Format Version 2) Performance metrics from host rhel6u10a.local commencing Mon Nov 25 21:55:04.851 2019 ending Mon Nov 25 22:06:04.874 2019 Archive timezone: JST-9 PID for pmlogger: 24002 Log Label (Log Format…
- 命令/配置摘录:
# dnf install pcp-system-tools
# DO NOT REMOVE OR EDIT THE FOLLOWING LINE $version=1.1 192.168.4.13 n n PCP_ARCHIVE_DIR/rhel7u4a -r -T24h10m -c config.rhel7u4a 192.168.4.14 n n PCP_ARCHIVE_DIR/rhel6u10a -r -T24h10m -c config.rhel6u10a 192.168.4.62 n n PCP_ARCHIVE_DIR/rhel8u1a -r -T24h10m -c config.rhel8u1a6.6. systemd 单元和 pmlogger
- 要点:pmlogger 部署(无论本地或远程场)都包含多个关联的 systemd 服务和计时器单元。这些单元监控 pmlogger 实例,重启失败的进程,并通过文件压缩等任务管理存档。
- 要点:通常由 pmlogger 部署的检查和内务服务有:
6.7. 管理被 pmlogger 触发的 systemd 服务
- 要点:您可以使用控制文件为 pmlogger 实例收集的数据创建一个自动化的自定义归档管理系统。
- 要点:主 pmlogger 实例必须与它连接的 pmcd 运行在同一主机上。您不需要配置主实例。如果中央主机从连接到远程主机上运行的 pmcd 实例的多个 pmlogger 实例收集数据,则可能不需要主实例。
- 列表:执行以下操作之一: 对于主 pmlogger 实例,请使用 /etc/pcp/pmlogger/control.d/local 对于远程主机,请使用 /etc/pcp/pmlogger/control.d/remote 使用您要使用的文件名替换 remote。 文件应为要记录的每个主机包含一行。自动创建的主记录器实例的默认格式类似如下: # === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h1…
- 列表:对于主 pmlogger 实例,请使用 /etc/pcp/pmlogger/control.d/local
- 列表:对于远程主机,请使用 /etc/pcp/pmlogger/control.d/remote 使用您要使用的文件名替换 remote。 文件应为要记录的每个主机包含一行。自动创建的主记录器实例的默认格式类似如下: # === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb 其中的字段是: Host 要记录的主机的名称。 P? 是否是"Pri…
- 命令/配置摘录:
# === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb6.8. 使用 pmrep 重现 PCP 日志存档
- 要点:记录指标数据后,您可以重新执行 PCP 日志存档。要将日志导出到文本文件并将其导入到电子表格中,请使用 pcp2csv、pcp2xml、pmrep 或 pmlogsummary 等。
- 要点:使用 pmrep 工具,您可以:
- 列表:查看日志文件。
- 列表:解析所选的 PCP 日志归档,并将值导出到 ASCII 表中。
- 列表:通过在命令行上指定单个指标,来提取整个存档日志或只选择日志中的指标值。
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:pmlogger 服务已启用。如需更多信息,请参阅启用 pmlogger 服务。
- 列表:安装 pcp-gui 软件包。 # dnf install pcp-gui
- 命令/配置摘录:
# dnf install pcp-gui
$ pmrep --start @3:00am --archive 20211128 --interval 5seconds --samples 10 --output csv disk.dev.write第 7 章 使用 Performance Co-Pilot 监控性能
- 要点:Performance Co-Pilot (PCP) 是用于监控、视觉化、存储和分析系统级性能测量的工具、服务和库集。作为系统管理员,您可以在 Red Hat Enterprise Linux 中使用 PCP 监控系统性能。
7.1. 使用 pmda-postfix 监控 postfix
- 要点:您可以使用 pmda-postfix 监控 postfix 邮件服务器的性能指标。它有助于检查每秒接收多少电子邮件。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:pmlogger 服务已启用。如需更多信息,请参阅启用 pmlogger 服务。
- 列表:安装以下软件包: 安装 pcp-system-tools : # dnf install pcp-system-tools 安装 pmda-postfix 软件包来监控 postfix : # dnf install pcp-pmda-postfix postfix 安装 logging 守护进程: # dnf install rsyslog 安装邮件客户端进行测试: # dnf install mutt
- 列表:安装 pcp-system-tools : # dnf install pcp-system-tools
- 列表:安装 pmda-postfix 软件包来监控 postfix : # dnf install pcp-pmda-postfix postfix
- 列表:安装 logging 守护进程: # dnf install rsyslog
- 命令/配置摘录:
# dnf install pcp-system-tools
# dnf install pcp-pmda-postfix postfix7.2. 使用 PCP Charts 应用程序可视化追踪 PCP 日志存档
- 要点:记录指标数据后,将 PCP 日志存档作为图形重新显示。指标来源于一个或多个实时主机。您还可以使用 PCP 日志存档中的指标数据作为历史数据源。
- 要点:在 PCP Charts 应用程序中,您可以使用行图表、栏图或利用率图形自定义接口来显示性能指标数据。
- 列表:重播 PCP 图表应用程序中的数据,并使用图形来视觉化重新检查数据以及系统的实时数据。
- 列表:将性能指标值图表到图表中。
- 列表:同时显示多个 chart。
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:使用 pmlogger 记录性能数据。如需更多信息,请参阅使用 pmlogger 的日志记录性能数据。
- 列表:安装 pcp-gui 软件包。 # dnf install pcp-gui
- 命令/配置摘录:
# dnf install pcp-gui
# pmchart7.3. 使用 PCP 从 SQL 服务器收集数据
- 要点:要监控和分析数据库性能问题,请使用 Performance Co-Pilot (PCP)中的 SQL Server 代理。您可以在系统上使用 PCP 来收集 Microsoft SQL Server 的数据。
- 要点:先决条件
- 列表:您已为 Red Hat Enterprise Linux 安装了 Microsoft SQL Server,并建立了到 SQL 服务器的 可信 连接。
- 列表:您已为 Red Hat Enterprise Linux 安装了用于 SQL Server 的 Microsoft ODBC 驱动程序。
- 列表:安装 PCP: # dnf install pcp-zeroconf
- 列表:安装 pyodbc 驱动程序所需的软件包: # dnf install gcc-c++ python3-devel unixODBC-devel # dnf install python3-pyodbc
- 列表:安装 mssql 代理: 为 PCP 安装 Microsoft SQL Server 域名代理: # dnf install pcp-pmda-mssql 编辑 /etc/pcp/mssql/mssql.conf 文件,来为 mssql 代理配置 SQL 服务器帐户的用户名和密码。请确定您配置的帐户具有性能数据的访问权限。 username: user_name password: user_password 使用 SQL Server 帐户 username 替换 user_name, 使用这个帐户的 SQL Server 用户 password 替换 user_password 。
- 列表:为 PCP 安装 Microsoft SQL Server 域名代理: # dnf install pcp-pmda-mssql
- 命令/配置摘录:
# dnf install pcp-zeroconf
# dnf install gcc-c++ python3-devel unixODBC-devel第 8 章 配置 PCP 指标的图形表示
- 要点:组合 Performance Co-pilot (pcp)、grafana、valkey、pcp bpftrace 和 pcp vector,以提供实时或记录的 PCP 数据的图形表示。
8.1. 使用 pcp-zeroconf 配置 PCP
- 要点:您可以使用 pcp-zeroconf 软件包在系统中配置 PCP。安装 pcp-zeroconf 软件包后,系统会将默认指标集合记录到存档文件中。
- 要点:流程
- 列表:安装 pcp-zeroconf 软件包: # dnf install pcp-zeroconf
- 列表:确保 pmlogger 服务处于活跃状态,并开始归档指标: # pcp | grep pmlogger pmlogger: primary logger: /var/log/pcp/pmlogger/localhost.localdomain/20200401.00.12
- 列表:使用 Performance Co-Pilot 监控性能
- 命令/配置摘录:
# dnf install pcp-zeroconf
# pcp | grep pmlogger8.2. 配置 grafana-server
- 要点:Grafana 生成可从浏览器访问的图形。grafana-server 是 Grafana 仪表板的后端服务器。默认情况下,它侦听所有接口,并提供通过 Web 浏览器访问的 Web 服务。grafana-pcp 插件与后端中的 pmproxy 守护进程交互。
- 要点:先决条件
- 列表:配置了 PCP。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:安装以下软件包: # dnf install grafana grafana-pcp
- 列表:重启并启用 grafana-server : # systemctl restart grafana-server # systemctl enable grafana-server
- 列表:为到 Grafana 服务的网络流量打开服务器防火墙。 # firewall-cmd --permanent --add-service=grafana success # firewall-cmd --reload success
- 列表:确定 grafana-server 正在侦听并响应请求: # ss -ntlp | grep 3000 LISTEN 0 128 :3000 *: users:(("grafana-server",pid=19522,fd=7))
- 列表:确保 grafana-pcp 插件已安装: # grafana-cli plugins ls | grep performancecopilot-pcp-app performancecopilot-pcp-app @ 5.2.2
- 命令/配置摘录:
# dnf install grafana grafana-pcp
# systemctl restart grafana-server8.3. 配置 valkey
- 要点:使用 Valkey 数据源查看数据存档,使用 pmseries 语言查询时序,并跨多台主机分析数据。
- 要点:先决条件
- 列表:配置了 PCP。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:grafana-server 被配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:邮件传输代理(例如 postfix )已安装并已配置。
- 列表:安装 valkey 软件包: # dnf install valkey
- 列表:启动并启用 pmproxy 和 valkey 服务: # systemctl start pmproxy valkey # systemctl enable pmproxy valkey
- 列表:重启 grafana-server : # systemctl restart grafana-server
- 命令/配置摘录:
# dnf install valkey
# systemctl start pmproxy valkey8.4. 访问 Grafana Web UI
- 要点:您可以访问 Grafana Web 界面。通过使用 Grafana Web 界面,您可以在 Valkey 中添加 Valkey、PCP bpftrace 和 PCP Vector 数据源,创建仪表板,查看任何有用指标的概览,并在 Valkey 中创建警报。
- 要点:先决条件
- 列表:配置了 PCP。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:grafana-server 被配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:在客户端系统上,打开浏览器并使用 http://192.0.2.0:3000 链接在端口 3000 上访问 grafana-server。 当从远程机器访问 Grafana web UI 时,将使用机器 IP 替换 192.0.2.0 ,或者在本地访问 web UI 时使用 localhost 替换。
- 列表:首次登录时,在 Email 或 username 和 Password 字段中输入 admin。
- 列表:Grafana 提示设置 新密码 以创建安全帐户。如果要稍后设置,请点 Skip。
- 列表:在左上角的更多选项图标(swig)中,点 Administration > Plugins。
- 注意:注意 屏幕右上角有一个 Settings 图标,但它控制常规 Dashboard settings。
8.5. 为 Valkey 和 PCP 配置安全连接
- 要点:您可以在 Performance Co-Pilot (PCP)、Grafana 和 Valkey 之间建立安全连接。在这些组件之间建立安全连接有助于防止未授权方访问或修改正在收集和监控的数据。
- 要点:先决条件
- 列表:PCP 已安装。如需更多信息,请参阅安装并启用 PCP。
- 列表:Grafana 服务器已配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:Valkey 已安装。如需更多信息,请参阅配置 Valkey。
- 列表:私有客户端密钥存储在 /etc/valkey/client.key 文件中。如果您使用其他路径,请修改流程相应步骤中的路径。有关创建私钥、创建证书签名请求(CSR)以及从证书颁发机构(CA)请求证书的详情,请查看您的 CA 文档。
- 列表:TLS 客户端证书存储在 /etc/valkey/client.crt 文件中。如果您使用其他路径,请修改流程相应步骤中的路径。
- 列表:TLS 服务器密钥存储在 /etc/valkey/valkey.key 文件中。如果您使用其他路径,请修改流程相应步骤中的路径。
- 命令/配置摘录:
port 0 tls-port 6379 tls-cert-file /etc/valkey/valkey.crt tls-key-file /etc/valkey/valkey.key tls-client-key-file /etc/valkey/client.key tls-client-cert-file /etc/valkey/client.crt tls-ca-cert-file /etc/valkey/ca.crt
# su valkey -s /bin/bash -c \8.6. 在 PCP Valkey 数据源中创建面板和警报
- 要点:添加 PCP Valkey 数据源后,您可以使用有用的指标概述来查看仪表板。添加查询来视觉化负载图形,并创建可帮助您在系统发生后查看系统问题的警报。
- 要点:先决条件
- 列表:Valkey 已配置。如需更多信息,请参阅配置 Valkey。
- 列表:grafana-server 可以访问。如需更多信息,请参阅 访问 Grafana Web UI。
- 列表:登录到 Grafana Web UI。
- 列表:在 Grafana Home 页面中,点 Add your first data source。
- 列表:在 Add data source 窗格中,在 Filter by name or type 文本框中键入 valkey,然后 单击 Valkey。
- 列表:在 Data Sources / Valkey 窗格中,执行以下操作: 在 URL 字段中添加 http://localhost:44322,然后点 Save & Test。 点 Dashboards tab > Import > Valkey: Host Overview 查看带有任何有用指标概述的仪表盘。 图 8.2. Valkey: 主机概述
8.7. 为警报添加通知频道
- 要点:添加通知频道,以便在满足规则条件时从 Grafana 接收警报通知,且系统需要注意。从支持的通知程序列表中选择任何一种类型后,您可以收到这些警报。
- 要点:Grafana 支持以下通知频道类型: DingDing, Discord, Email, Google Hangouts Chat, HipChat, Kafka REST Proxy, LINE, Microsoft Teams, OpsGenie, PagerDuty, Prometheus Alertmanager, Pushover, Sensu, Slack, Telegram, Threema Gateway, VictorOps, 和 webhook。
- 列表:grafana-server 可以访问。如需更多信息,请参阅 访问 Grafana Web UI。
- 列表:已创建一个警报规则。如需更多信息,请参阅在 PCP valkey 数据源中创建面板和警报。
- 列表:配置 SMTP 并在 grafana/grafana.ini 文件中添加有效的发送者电子邮件地址,例如: # vi /etc/grafana/grafana.ini [smtp] enabled = true from_address = abc@gmail.com 使用有效电子邮件地址替换 abc@gmail.com。
- 列表:更改配置后重启 grafana-server: # systemctl restart grafana-server.service
- 列表:在菜单中,将鼠标悬停在 Alerting 图标 > 点 Notification channels > Add channel。
- 列表:在 Add notification 频道详情窗格中执行以下操作: 在 Name 文本框中输入您的名称。 选择通信 Type,例如 Email 并输入电子邮件地址。您可以使用 ; 分隔符添加多个电子邮件地址。 可选:配置可选的电子邮件 设置和 Notification 设置。
- 命令/配置摘录:
# vi /etc/grafana/grafana.ini
[smtp] enabled = true from_address = abc@gmail.com8.8. 在 PCP 组件间配置身份验证
- 要点:您可以使用 scram-sha-256 身份验证机制来配置身份验证。PCP 通过简单身份验证安全层(SASL)框架支持。
- 要点:流程
- 列表:为 scram-sha-256 身份验证机制安装 SASL 框架: # dnf install cyrus-sasl-scram cyrus-sasl-lib
- 列表:在 pmcd.conf 文件中指定支持的身份验证机制和用户数据库路径: # vi /etc/sasl2/pmcd.conf mech_list: scram-sha-256 sasldb_path: /etc/pcp/passwd.db
- 列表:创建一个新用户: # useradd -r metrics 使用您的用户名替换 metrics。
- 列表:在用户数据库中添加创建的用户: # saslpasswd2 -a pmcd metrics Password: Again (for verification): 要添加创建的用户,需要输入 metrics 帐户密码。
- 列表:设置用户数据库的权限: # chown root:pcp /etc/pcp/passwd.db # chmod 640 /etc/pcp/passwd.db
- 列表:重启 pmcd 服务: # systemctl restart pmcd
- 命令/配置摘录:
# dnf install cyrus-sasl-scram cyrus-sasl-lib
# vi /etc/sasl2/pmcd.conf8.9. 安装 PCP bpftrace
- 要点:您可以安装 PCP bpftrace 代理来反省系统,并从内核和用户空间追踪点中收集指标。bpftrace 代理使用 bpftrace 脚本收集指标。bpftrace 脚本使用增强的 Berkeley Packet Filter (eBPF)。
- 要点:先决条件
- 列表:配置了 PCP。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:grafana-server 被配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:scram-sha-256 身份验证机制被配置。如需更多信息,请参阅在 PCP 组件之间配置身份验证。
- 列表:安装 pcp-pmda-bpftrace 软件包: # dnf install pcp-pmda-bpftrace
- 列表:编辑 bpftrace.conf 文件并添加用户: # vi /var/lib/pcp/pmdas/bpftrace/bpftrace.conf [dynamic_scripts] enabled = true auth_enabled = true allowed_users = root,metrics 在 PCP 组件间配置身份验证时,使用 用户名替换 metrics。
- 列表:安装 bpftrace PMDA: # cd /var/lib/pcp/pmdas/bpftrace/ # ./Install Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD … Check bpftrace metrics have appeared ... 7 metrics and 6 values pmda-bpftrace 现已安装,只能在验证您的用户后使用。如需更多信息,请参阅 …
- 命令/配置摘录:
# dnf install pcp-pmda-bpftrace
# vi /var/lib/pcp/pmdas/bpftrace/bpftrace.conf8.10. 查看 PCP bpftrace System Analysis 仪表盘
- 要点:PCP bpftrace 数据源通过标准 pmlogger 实例或存档访问不可用的实时数据。在 PCP bpftrace 数据源中,查看包含有用指标概述的仪表板。
- 要点:先决条件
- 列表:PCP bpftrace 已安装。如需更多信息,请参阅安装 PCP bpftrace。
- 列表:grafana-server 被配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:登录到 Grafana Web UI。
- 列表:在 Grafana Home 页面中,点 Add your first data source。
- 列表:在 Add data source 窗格中,在 Filter by name or type 文本框中键入 bpftrace,然后点 PCP bpftrace。
- 列表:在 Data Sources / PCP bpftrace 窗格中,执行以下操作: 在 URL 字段中添加 http://localhost:44322。 切换 Basic Auth 选项,并在 User 和 Password 字段中添加创建的用户凭证。 点 Save and Test。 图 8.5. 在数据源中添加 PCP bpftrace 点 Dashboards 选项卡 > Import > PCP bpftrace: System Analysis 来查看带有任何有用指标概述的仪表盘。 图 8.6. PCP bpftrace: 系统分析
8.11. 安装 PCP 向量
- 要点:您必须在开始使用前安装 pcp vector。
- 要点:先决条件
- 列表:配置了 PCP。如需更多信息,请参阅使用 pcp-zeroconf 配置 PCP。
- 列表:grafana-server 被配置。如需更多信息 ,请参阅配置 grafana-server。
- 列表:安装 bcc PMDA: # cd /var/lib/pcp/pmdas/bcc # ./Install [Wed Apr 1 00:27:48] pmdabcc(22341) Info: Initializing, currently in 'notready' state. [Wed Apr 1 00:27:48] pmdabcc(22341) Info: Enabled modules: [Wed Apr 1 00:27:48] pmdabcc(22341) Info: ['biolatency', 'sysfork', [...] Updating the Performance Metrics Name Space (P…
- 命令/配置摘录:
# cd /var/lib/pcp/pmdas/bcc
# ./Install8.12. 查看 PCP Vector 清单
- 要点:PCP Vector 数据源显示实时指标并使用 pcp 指标。它分析单个主机的数据。添加 PCP 向量数据源后,查看包含有用指标概述的仪表板。另外,查看清单中的相关故障排除或参考链接。
- 要点:先决条件
- 列表:已安装 PCP 向量。如需更多信息,请参阅安装 PCP 向量。
- 列表:grafana-server 可以访问。如需更多信息,请参阅 访问 Grafana Web UI。
- 列表:登录到 Grafana Web UI。
- 列表:在 Grafana Home 页面中,点 Add your first data source。
- 列表:在 Add data source 窗格中,在 Filter by name or type 文本框中键入 vector,然后点 PCP 向量。
- 列表:在 Data Sources / PCP Vector 窗格中,执行以下操作: 在 URL 字段中添加 http://localhost:44322,然后点 Save & Test。 点 Dashboards 选项卡 > Import * PCP Vector: Host Overview 来查看带有任何有用指标概述的仪表盘。 图 8.7. PCP Vector:主机概述
8.13. 在 Grafana 中使用 heatmaps
- 要点:使用 Grafana 中的 heatmaps 将数据视为直方图,识别数据中的趋势和模式,并查看它们随时间变化。每个 heatmap 列都是直方图,单位颜色显示观察情况的密度。
- 要点:先决条件
- 列表:Valkey 已配置。如需更多信息,请参阅配置 Valkey。
- 列表:grafana-server 可以访问。如需更多信息,请参阅 访问 Grafana Web UI。
- 列表:PCP valkey 数据源已配置。如需更多信息,请参阅在 PCP Valkey 数据源中创建面板和警报。
- 列表:将光标悬停在 Dashboards 选项卡上,然后单击 + New dashboard。
- 列表:在 Add 面板 菜单上,单击 Add a new panel。
- 列表:在 Query 选项卡中: 从查询列表,而不是所选的默认选项中选择 Valkey。 在文本字段 A 中,输入指标,如 kernel.all.load ,来视觉化内核负载图。
8.14. 为 Grafana geomaps 配置 pcp-geolocate
- 要点:配置 pcp-geolocate 服务会将 longitude 和 latitude 标签添加到 Valkey 中的 Performance Co-Pilot (PCP)指标值。启用这个服务,Grafana geomaps 可以从全局映射中监控的系统放置指标。
- 要点:先决条件
- 列表:Valkey 已配置。
- 列表:grafana-server 可以访问。
- 列表:安装 pcp-geolocate 软件包: # dnf install pcp-geolocate
- 列表:启动并启用 pcp-geolocate 服务: # systemctl start pcp-geolocate # systemctl enable pcp-geolocate
- 列表:重启 pmproxy、valkey 和 grafana-server 以应用更改: # systemctl restart pmproxy valkey grafana-server
- 列表:验证 Valkey 数据库中是否存在 longitude 和 latitude 标签: # pmseries --labels 输出结果类似以下示例: {"agent":"linux","domainname":"example.com","groupid":1000,"hostname":"server.example.com","latitude":-25.28496,"longitude":152.87886,"machineid":"295b16e3b6074cc8bdbda8bf96f6930a","userid":1000} 输出必须包含 latitude 和 longitude 标签。如果没有这些标签,geomap …
- 命令/配置摘录:
# dnf install pcp-geolocate
# systemctl start pcp-geolocate8.15. 在 Grafana 中使用 geomaps 视觉化 PCP 数据
- 要点:Grafana geomaps 中的 Performance Co-Pilot (PCP)指标显示全局映射中监控系统的性能数据。使用 Red Hat Enterprise Linux 10.1 及之后的版本中的 PCP Valkey 数据源比较地理位置的指标并识别需要进一步调查的系统。
- 要点:先决条件
- 列表:PCP Valkey 数据源已配置。
- 列表:pcp-geolocate 被配置。
- 列表:登录到 Grafana Web UI。
- 列表:创建 geomap 面板: 将光标悬停在 Dashboards 选项卡上,然后单击 + New dashboard。 在 Add 面板 菜单上,单击 Add a new panel。 在 Query 选项卡中,从查询列表中选择 Valkey,而不是所选的 默认选项。 打开查询窗口底部的 Format 下拉菜单,然后选择 Geomap。 在 A 的文本字段中,输入 PCP 指标,如 kernel.all.pswitch。 可选:在 Panel options 部分中,添加 Panel title 和 Description。 可选:在面板编辑器中,打开 Thresholds 部分,并设置阈值和颜色。例如,将阈值设置为 1000,颜色…
- 列表:将光标悬停在 Dashboards 选项卡上,然后单击 + New dashboard。
- 列表:在 Add 面板 菜单上,单击 Add a new panel。
8.16. 管理 Grafana 的 SELinux 布尔值
- 要点:grafana-selinux 子软件包包括几个 SELinux 布尔值,它们控制 Grafana 对外部服务的访问。这些布尔值默认为 off。您可以根据您的系统要求将大门设置为 on 或 off。
- 要点:先决条件
- 列表:您已安装了 grafana-selinux 子软件包。
- 列表:您有 root 权限。
- 列表:查看所有与 Grafana 相关的 SELinux 布尔值: # semanage boolean -l | grep grafana
- 列表:启用 SELinux 布尔值: # setsebool [-P] <boolean_name> on 将 <boolean_name> 替换为您要启用的 SELinux 布尔值的名称。 使用 -P 选项使更改在系统重启后仍然有效。
- 列表:将 <boolean_name> 替换为您要启用的 SELinux 布尔值的名称。
- 列表:使用 -P 选项使更改在系统重启后仍然有效。
- 命令/配置摘录:
# semanage boolean -l | grep grafana
# setsebool [-P] <boolean_name> on8.17. Grafana 问题故障排除
- 要点:有时,需要对 Grafana 问题进行故障排除,如 Grafana 不显示数据、黑色仪表板或类似的问题。
- 要点:流程
- 列表:使用以下命令验证 pmlogger 服务是否已启动并正在运行: $ systemctl status pmlogger
- 列表:使用以下命令验证文件是否在磁盘中创建或修改: $ ls /var/log/pcp/pmlogger/$(hostname)/ -rlt total 4024 -rw-r--r--. 1 pcp pcp 45996 Oct 13 2019 20191013.20.07.meta.xz -rw-r--r--. 1 pcp pcp 412 Oct 13 2019 20191013.20.07.index -rw-r--r--. 1 pcp pcp 32188 Oct 13 2019 20191013.20.07.0.xz -rw-r--r--. 1 pcp pcp 44756 Oct 13 2019 20191013.20.30-00.…
- 列表:使用以下命令验证 pmproxy 服务是否正在运行: $ systemctl status pmproxy
- 列表:通过查看 /var/log/pcp/ pmproxy /pmproxy.log 文件,验证 pmproxy 是否正在运行、时间序列支持以及到 valkey 的连接是否已建立。确保它包含以下文本: pmproxy(1716) Info: valkey slots, command keys, schema version setup Here, 1716 is the PID of pmproxy, which will be different for every invocation of pmproxy. Verify if the valkey database contains any keys by executing …
- 列表:使用以下命令验证任何 PCP 指标是否在 valkey 数据库和 pmproxy 中访问它们: $ pmseries disk.dev.read 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df $ pmseries "disk.dev.read[count:10]" 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df [Mon Jul 26 12:21:10.085468000 2021] 117971 70e83e88d4e1857a3a31605c6d1333755f2dd17c [Mon Jul 26 12:21:00.087401000 2021] 117…
- 列表:使用以下命令验证 Grafana 日志中是否存在任何错误: $ journalctl -e -u grafana-server -- Logs begin at Mon 2021-07-26 11:55:10 IST, end at Mon 2021-07-26 12:30:15 IST. -- Jul 26 11:55:17 localhost.localdomain systemd[1]: Starting Grafana instance... Jul 26 11:55:17 localhost.localdomain grafana-server[1171]: t=2021-07-26T11:55:17+0530 lvl=…
- 命令/配置摘录:
$ systemctl status pmlogger
$ ls /var/log/pcp/pmlogger/$(hostname)/ -rlt第 9 章 使用 PowerTOP 管理能耗
- 要点:降低计算机系统的整体功耗有助于节省成本。要优化能源消耗,请研究系统任务并配置每个组件,以满足该特定任务的性能要求。
- 要点:降低特定组件或整个系统的功耗,可以降低产生的热量并可能会降低性能。正确的电源管理结果包括:
- 列表:服务器和计算中心的散热问题。
- 列表:降低二次成本,包括冷却、空间、电缆、发电机和不间断电源(UPS)。
- 列表:延长笔记本电脑的电池寿命.
- 列表:降低二氧化碳排放量。
- 列表:满足政府有关绿色 IT (如能源之星)的法规或法律要求。
- 列表:满足公司对新系统的指导方针。
9.1. 电源管理基础
- 要点:有效电源管理基于以下原则构建:
- 要点:但是,如果您的系统中存在会创建不必要的计时器事件的应用程序时,此功能的好处可能会减少。轮询事件(如检查卷更改或鼠标移动)是此类事件的示例。
- 列表:对 ARM64 的 Collaborative Processor Performance Controls (CPPC) 支持
- 列表:IBM Power 系统的 PowerNV 支持
- 列表:Cool’n’Quiet
- 列表:ACPI (C-state)
- 列表:Smart
- 列表:Sleep (C-states)
9.2. 审计和分析概述
- 要点:单个系统的详细手动审核、分析和调优很少。这样做所需的时间和成本通常超过了这些最后一部分系统调优所获得的好处。
- 要点:对可重复使用相同设置的大型一组相同的系统来说,调优非常宝贵。例如,部署数千台桌面系统,或部署由几乎相同的机器组成的 HPC 集群。
- 列表:Hewlett Packard 服务器系统的 iLO 管理控制台具有一个电源管理模块,您可以通过 Web 访问。
- 列表:IBM 在其 BladeCenter 电源管理模块中提供类似的解决方案。
- 列表:在一些 Dell 系统上,IT Assistant 提供电源监控功能。
9.3. 用于审计的工具
- 要点:Red Hat Enterprise Linux 提供系统审计和分析的工具。使用这些工具验证现有查找或获取有关特定系统组件的深度信息。
- 要点:其中许多工具用于性能调优,包括:
- 列表:第一列 253,0 是设备主和次元组。
- 列表:第二列显示事件的序列号。
- 列表:第三列显示发生事件的 CPU id。
- 列表:时间戳的第四列.
- 列表:I/O 颁发进程的第五列.
- 列表:第六个列显示事件类型。Q 表示排队的进程,C 表示完成进程。
- 命令/配置摘录:
# diskdevstat
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 3575 1000 dm-2 59 0.000 0.365 0.006 5 0.000 0.000 0.000 mozStorage #5 3575 1000 dm-2 7 0.000 0.000 0.000 0 0.000 0.000 0.000 localStorage DB [...]9.4. PowerTOP 的目的
- 要点:PowerTOP 是一个诊断与功耗相关问题的程序,并提供了有关如何延长电池生命周期的建议。powertop 估算了单个进程、设备和内核处理程序的总系统功耗和消耗。
- 要点:工具还可识别频繁绕过 CPU 的内核和用户空间应用程序的特定组件。Red Hat Enterprise Linux 使用 PowerTOP 版本 2.x。
9.5. 安装 PowerTOP
- 要点:您可以安装 PowerTop ,并开始使用它来诊断与功耗相关的问题。
- 要点:流程
- 列表:打开命令行并输入: # dnf install powertop
- 命令/配置摘录:
# dnf install powertop9.6. 启动 PowerTOP
- 要点:在您的系统上安装后,您可以开始使用 PowerTop 来优化系统性能。
- 要点:先决条件
- 列表:您使用笔记本电脑的电池供电。
- 列表:要运行 PowerTOP,请输入: # powertop
- 命令/配置摘录:
# powertop9.7. 校准 PowerTOP
- 要点:您可以使用 PowerTOP 校准进程来提高笔记本电脑功耗测量的准确性。
- 要点:流程
- 列表:在笔记本电脑中,您可以通过运行以下命令来布放节能引擎: # powertop --calibrate 让校准完成,而不会在此过程中与机器交互。校准需要一些时间,因为进程执行各种测试,整个测试通过强度级别和交换机设备进行循环。完成校准进程后,PowerTOP 正常启动。让它运行大约一小时以收集数据。 收集足够数据后,输出表的第一列中将显示节能数据。
- 命令/配置摘录:
# powertop --calibrate9.8. 设置测量间隔
- 要点:默认情况下,PowerTOP 每隔 20 秒进行一次测量。但是,您可以根据您的要求更改此测量频率。
- 要点:流程
- 列表:要更改测量频率,请使用 --time 选项运行 powertop 命令: # powertop --time=<time_in_seconds>
- 命令/配置摘录:
# powertop --time=<time_in_seconds>9.9. 控制 CPU 频率驱动程序和模式
- 要点:在使用 Intel P-State 驱动程序时,如果驱动程序处于被动模式,PowerTOP 仅显示 Frequency Stats 选项卡中的值。但是,即使在这种情况下,值也可能是不完整的。
- 要点:Intel P-State 驱动程序支持以下模式:
- 列表:使用硬件 P-States (HWP) 的活跃模式
- 列表:没有 HWP 的活跃模式
- 列表:被动模式
- 列表:查看载入了哪个驱动程序以及在什么模式下: # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver 如果 Intel P-State 驱动程序已加载且处于 active 模式,则返回 intel_pstate。 如果 Intel P-State 驱动程序已加载且处于 passive 模式,则返回 intel_cpufreq。 如果 ACPI CPUfreq 驱动程序已载入,则返回 acpi-cpufreq。
- 列表:如果 Intel P-State 驱动程序已加载且处于 active 模式,则返回 intel_pstate。
- 列表:如果 Intel P-State 驱动程序已加载且处于 passive 模式,则返回 intel_cpufreq。
- 命令/配置摘录:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
intel_pstate=passive9.10. 生成 HTML 输出
- 要点:您还可以在命令行中生成与 powertop 输出之外的 HTML 报告。
- 要点:流程
- 列表:使用 --html 选项运行 powertop 命令: # powertop --html=<htmlfile.html> 将 <htmlfile.html> 参数替换为输出文件所需的名称。
- 命令/配置摘录:
# powertop --html=<htmlfile.html>9.11. 优化功耗
- 要点:您可以使用 powertop 服务或 powertop2tuned 工具来优化功耗。
9.11.1. 使用 powertop 服务优化功耗
- 要点:您可以使用 powertop 服务,来从引导时的 Tunables 选项卡中自动启用所有 PowerTOP 的建议。
- 要点:流程
- 列表:启用 powertop 服务: # systemctl enable powertop
- 命令/配置摘录:
# systemctl enable powertop9.11.2. powertop2tuned 工具
- 要点:使用 powertop2tuned 工具从 PowerTOP 建议中创建自定义 TuneD 配置文件。默认情况下,powertop2tuned 在 /etc/tuned/profiles/ 目录中创建配置文件,并根据当前所选的 TuneD 配置文件创建自定义配置文件。
- 要点:为了安全起见,新配置文件中的所有 PowerTOP 调优最初都被禁用。您可以通过在 /etc/tuned/profiles/profile_name/tuned.conf 文件中取消它们的注释来启用调优。
9.11.3. 使用 powertop2tuned 程序优化电源消耗
- 要点:您可以使用 powertop2tuned 工具生成一个自定义 TuneD 配置文件,其帮助优化您系统的功耗。
- 要点:先决条件
- 列表:powertop2tuned 工具已安装在系统上。 # dnf install tuned-utils
- 列表:创建自定义配置文件: # powertop2tuned <new_profile_name>
- 列表:激活新配置文件: # tuned-adm profile <new_profile_name>
- 命令/配置摘录:
# dnf install tuned-utils
# powertop2tuned <new_profile_name>9.11.4. 比较 powertop2tuned 和 powertop.service 的用法
- 要点:对于以下原因,您可以选择使用 powertop2tuned 而不是 powertop.service 来优化功耗:
- 列表:powertop2tuned 工具代表 PowerTOP 集成到 TuneD ,其实现了这两个工具的好处。
- 列表:powertop2tuned 实用程序提供对已启用的调优的精细控制。
- 列表:使用 powertop2tuned 时,不会自动启用潜在的危险调优。
- 列表:通过 powertop2tuned,可以在不重启的情况下进行回滚。
第 10 章 perf 入门
- 要点:作为系统管理员,您可以使用 perf 工具来收集和分析系统的性能数据。带有基于内核的子系统 Performance Counters for Linux (PCL)的 perf 用户空间工具界面。
- 要点:perf 使用性能监控单元(PMU)来测量、记录和监控各种硬件和软件事件。perf 还支持 tracepoints、kprobes 和 uprobes。
10.1. 安装 perf
- 要点:您必须安装 perf 用户空间工具来开始使用 perf 工具。
- 要点:流程
- 列表:安装 perf 工具: # dnf install perf
- 命令/配置摘录:
# dnf install perf10.2. 常见 perf 命令
- 要点:您可以使用以下常用的 perf 命令来收集和分析性能数据。
第 11 章 使用 perf top 实时分析 CPU 使用情况
- 要点:您可以使用 perf top 命令实时测量不同函数的 CPU 使用情况。
11.1. perf top 的目的
- 要点:perf top 命令执行实时系统分析,以及类似于 top 实用程序的功能。虽然 top 监控进程 CPU 使用量,perf top 则按特定功能显示 CPU 时间。
- 要点:在其默认状态下,perf top 告知在用户空间和内核空间中的所有 CPU 之间使用的功能。要使用 perf top,您需要 root 访问权限。
11.2. 使用 perf top 分析 CPU 使用量
- 要点:您可以使用 perf top 来监控实时 CPU 使用情况,并确定消耗最多处理时间的函数。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:有 root 访问权限。
- 列表:启动 perf top 监控界面: # perf top The monitoring interface looks similar to the following: Samples: 8K of event 'cycles', 2000 Hz, Event count (approx.): 4579432780 lost: 0/0 drop: 0/0 Overhead Shared Object Symbol 2.20% [kernel] [k] do_syscall_64 2.17% [kernel] [k] module_get_kallsym 1.49% [kernel] [k] copy_user_enhanc…
- 命令/配置摘录:
# perf top
The monitoring interface looks similar to the following: Samples: 8K of event 'cycles', 2000 Hz, Event count (approx.): 4579432780 lost: 0/0 drop: 0/0 Overhead Shared Object Symbol 2.20% [kernel] [k] do_syscall_64 2.17% [kernel] [k] module_get_kallsym 1.49% [kernel] [k] copy_user_enhanced_fast_string 1.37% libpthread-2.29.so [.] pthread_mutex_lock 1.31% [unknown] [.] 0000000000000000 1.07% [kernel] [k] psi_task_change 1.04% [kernel] [k] switch_mm_irqs_off 0.94% [kernel] [k] fget 0.74% [kernel] [k] entry_SYSCALL_64 0.69% [kernel] [k] syscall_return_via_sysret 0.69% libxul.so [.] 0x000000000113f9b0 0.67% [kernel] [k] kallsyms_expand_sy…11.3. perf 输出和符号解析
- 要点:perf top 监控界面提供 CPU 使用情况和函数活动的实时视图。了解其输出有助于识别性能瓶颈并优化系统行为。
- 要点:显示函数或符号的名称。
- 列表:在内核空间中运行的函数使用 [k] 进行标记。
- 列表:在用户空间中运行的功能使用 [.] 进行标记。
- 列表:使用调试信息启用调试
- 注意:注意 在提供调试信息后,不需要重新运行 perf record 命令。再次运行 perf report 命令将反映已解析的符号。
11.4. 启用调试和资源存储库
- 要点:要访问系统组件的基本调试数据,请启用调试和源存储库。RHEL 默认禁用这些空间来节省空间。使其能够安装性能测量和深度系统故障排除所需的 debuginfo 软件包。
- 要点:流程
- 列表:启用源并调试信息软件包通道: # subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-debug-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-source-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m)-appstream-debug-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m…
- 命令/配置摘录:
# subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-debug-rpms
# subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-source-rpms- 表格样本(共 5 行):
- 架构名称 | 订阅价值
- 64 位 Intel 和 AMD | x86_64
- 64-bit ARM | aarch64
- IBM POWER | ppc64le
11.5. 使用 GDB 获取应用程序或库的 debuginfo 软件包
- 要点:当您调试问题且已安装的软件包缺少所需的调试信息时,GNU Debugger 会检测到缺少的信息。然后,它会建议安装对应的 debug 软件包的命令。
- 要点:先决条件
- 列表:必须在系统上安装您要调试的应用程序或库。
- 列表:在系统中必须安装 GDB 和 debuginfo-install 工具。详情请参阅安装用于调试应用程序的工具。
- 列表:必须在系统上配置并启用提供 debuginfo 和 debugsource 软件包的存储库。详情请参阅 启用调试和源存储库。
- 列表:启动连接到要调试的应用程序或库的 GDB。GDB 自动识别缺少的调试信息,并建议要运行的命令。 $ gdb -q /bin/ls Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done. (no debugging symbols found)...done. Missing separate debuginfos, use: dnf debuginfo-install coreutils-9.5-6.el10.x86_64 (gdb)
- 列表:要退出 GDB,请输入 q 并按 Enter 确认。 (gdb) q
- 列表:运行 GDB 建议的命令来安装所需的 debuginfo 软件包: # dnf debuginfo-install coreutils-9.5-6.el10.x86_64 dnf 软件包管理工具提供更改的摘要、要求进行确认,并在确认后下载并安装所有必要的文件。如果 GDB 不能建议 debuginfo 软件包,请按照 手动获取应用程序或库的 debuginfo 软件包 中所述的流程操作。
- 命令/配置摘录:
$ gdb -q /bin/ls
Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done. (no debugging symbols found)...done. Missing separate debuginfos, use: dnf debuginfo-install coreutils-9.5-6.el10.x86_64 (gdb)第 12 章 使用 perf stat 在进程执行过程中计算事件
- 要点:您可以使用 perf stat 命令在进程执行过程中统计硬件和软件事件。
12.1. perf stat 的目的
- 要点:perf stat 命令为硬件和软件性能事件生成计数。如果没有指定任何事件,则 perf stat 会计算一组通用的硬件和软件事件。
12.2. 使用 perf stat 计数事件
- 要点:您可以使用 perf stat 计算在命令运行时出现的硬件和软件事件,并生成这些计数的统计信息。默认情况下,perf stat 以针对每个线程的模式运行。
- 要点:先决条件
- 列表:已安装 perf 用户空间工具,如 安装 perf 所述。
- 列表:您有访问计数用户空间和内核空间事件的 root 权限。
- 列表:计算事件数。 在没有 root 访问权限的情况下运行 perf stat 命令只会计数用户空间中发生的事件: $ perf stat ls Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 1.28 msec task-clock:u # 0.165 CPUs utilized 0 context-switches:u # 0.000 M/sec 0 cpu-migrations:u # 0.000 K/sec 104 page-faults:u # 0.081 M/…
- 列表:在没有 root 访问权限的情况下运行 perf stat 命令只会计数用户空间中发生的事件: $ perf stat ls Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 1.28 msec task-clock:u # 0.165 CPUs utilized 0 context-switches:u # 0.000 M/sec 0 cpu-migrations:u # 0.000 K/sec 104 page-faults:u # 0.081 M/sec 1,…
- 列表:要计数用户空间和内核空间事件,请输入: # perf stat ls Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 3.09 msec task-clock # 0.119 CPUs utilized 18 context-switches # 0.006 M/sec 3 cpu-migrations # 0.969 K/sec 108 page-faults # 0.035 M/sec 6,576,004 cycles # 2.125 GHz 5,694,2…
- 列表:默认情况下,perf stat 以针对每个线程的模式运行。要更改为 CPU 范围事件计数,请将 -a 选项传递给 perf stat。要计算 CPU 范围内的事件,您需要 root 访问权限: # perf stat -a ls
- 命令/配置摘录:
$ perf stat ls
Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 1.28 msec task-clock:u # 0.165 CPUs utilized 0 context-switches:u # 0.000 M/sec 0 cpu-migrations:u # 0.000 K/sec 104 page-faults:u # 0.081 M/sec 1,054,302 cycles:u # 0.823 GHz 1,136,989 instructions:u # 1.08 insn per cycle 228,531 branches:u # 178.447 M/sec 11,331 branch-misses:u # 4.96% of all branches 0.007754312 seconds time elapsed 0.000000000 seconds user 0.007717000 seconds sys12.3. perf stat 输出的解释
- 要点:perf stat 执行指定命令并计数命令执行期间发生的事件。它以三列的形式显示这些计数的统计信息:
- 列表:给定事件的发生的计数。
- 列表:计数的事件的名称。
- 列表:当相关的指标可用时,右列中的 hash 符号 (#) 会显示比例或百分比。例如,在默认模式中,perf stat 在右列中计算和显示每个周期的说明。分支丢失为总分支的百分比,显示了默认计数中的类似行为。
12.4. 将 perf stat 附加到正在运行的进程
- 要点:您可以将 perf stat 附加到正在运行的进程。这指示 perf stat 在执行命令期间仅计数指定进程中发生的事件。
- 要点:先决条件
- 列表:已安装 perf 用户空间工具,如 安装 perf 所述。
- 列表:将 perf stat 附加到正在运行的进程中: $ perf stat -p ID1,ID2 sleep seconds 前面的示例计数进程 ID1 和 ID2 在 sleep 命令指定的 seconds 时间段内的事件。
- 命令/配置摘录:
$ perf stat -p ID1,ID2 sleep seconds第 13 章 使用 perf 记录和分析性能配置文件
- 要点:使用 perf 工具记录性能数据,并稍后对其进行分析。
13.1. perf record 的目的
- 要点:perf record 命令对性能数据进行抽样,并将其存储在 perf.data 文件中。然后,您可以使用其他 perf 命令读取和可视化数据。perf.data 在当前目录中生成。它可以稍后访问,可能位于其他计算机上。
- 要点:您可以通过运行 perf record -a 来分析整个系统。这会记录性能数据,直到您按了 Ctrl+C 或特定命令执行完毕为止。您可以通过运行 perf record ./your_app 或使用 perf record -p PID 附加到已在运行的应用程序/进程来对单个应用程序/进程进行性能分析。
13.2. 记录性能配置文件
- 要点:您可以使用 perf record 来抽样和记录性能数据。捕获的数据级别取决于访问级别。没有 root 访问权限,perf record 仅收集用户空间中的数据。有 root 访问权限:perf record 收集用户空间和内核空间中的数据。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:如果要为用户和内核空间收集数据,则您需要有 root 访问权限。
- 列表:执行以下操作之一: 要为用户空间抽样和记录性能数据: $ perf record command 要为内核空间抽样和记录性能数据(使用 root 或 sudo 访问权限): # perf record command 使用您要进行分析的实际命令替换 command。如果没有指定命令,则 perf record 会抽样数据,直到通过按 Ctrl+C 手动停止。
- 列表:要为用户空间抽样和记录性能数据: $ perf record command
- 列表:要为内核空间抽样和记录性能数据(使用 root 或 sudo 访问权限): # perf record command 使用您要进行分析的实际命令替换 command。如果没有指定命令,则 perf record 会抽样数据,直到通过按 Ctrl+C 手动停止。
- 命令/配置摘录:
$ perf record command
# perf record command13.3. 以针对每个 CPU 的模式记录性能档案
- 要点:在每 CPU 模式中使用 perf record 来抽样并记录受监控 CPU 上所有线程的性能数据。它同时捕获用户空间和内核空间中的数据。默认情况下,CPU 模式会监控所有在线 CPU。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:记录性能数据示例: # perf record -a command 使用您要在过程中抽样数据的命令替换 command。如果没有指定命令,则 perf record 会抽样数据,直到通过按 Ctrl+C 手动停止。
- 命令/配置摘录:
# perf record -a command13.4. 使用 perf record 捕获调用图形数据
- 要点:您可以配置 perf record 工具,以便其记录哪个函数调用性能配置文件中的其他函数。如果多个进程调用相同功能,这有助于识别瓶颈。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:使用 --call-graph 选项记录性能数据示例: $ perf record --call-graph method command 使用您要在过程中抽样数据的命令替换 command。如果没有指定命令,则 perf record 会抽样数据,直到通过按 Ctrl+C 手动停止。 使用以下展开方法之一替换方法: fp 使用帧指针方法。根据编译器优化,如使用 GCC 选项 --fomit-frame-pointer 构建的二进制文件,这可能无法展开堆栈。 dwarf 使用 DWARF Call Frame 信息来 unwind 堆栈。 lbr 使用 Intel 处理器上的最后分支记录硬件。
- 列表:使用您要在过程中抽样数据的命令替换 command。如果没有指定命令,则 perf record 会抽样数据,直到通过按 Ctrl+C 手动停止。
- 列表:使用以下展开方法之一替换方法: fp 使用帧指针方法。根据编译器优化,如使用 GCC 选项 --fomit-frame-pointer 构建的二进制文件,这可能无法展开堆栈。 dwarf 使用 DWARF Call Frame 信息来 unwind 堆栈。 lbr 使用 Intel 处理器上的最后分支记录硬件。
- 命令/配置摘录:
$ perf record --call-graph method command13.5. 使用 perf report 分析 perf.data
- 要点:您可以使用 perf report 显示和分析 perf.data 文件中的数据。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:perf.data 文件存储在当前目录中。
- 列表:如果 perf.data 文件是使用 root 访问权限创建的,则具有 root 访问权限。
- 列表:显示 perf.data 文件的内容以做进一步分析: # perf report Samples: 2K of event 'cycles', Event count (approx.): 235462960 Overhead Command Shared Object Symbol 2.36% kswapd0 [kernel.kallsyms] [k] page_vma_mapped_walk 2.13% sssd_kcm libc-2.28.so [.] memset_avx2_erms 2.13% perf [kernel.kallsyms] [k] smp_call_function_single 1.53% gnom…
- 命令/配置摘录:
# perf report
Samples: 2K of event 'cycles', Event count (approx.): 235462960 Overhead Command Shared Object Symbol 2.36% kswapd0 [kernel.kallsyms] [k] page_vma_mapped_walk 2.13% sssd_kcm libc-2.28.so [.] memset_avx2_erms 2.13% perf [kernel.kallsyms] [k] smp_call_function_single 1.53% gnome-shell libc-2.28.so [.] strcmp_avx2 1.17% gnome-shell libglib-2.0.so.0.5600.4 [.] g_hash_table_lookup 0.93% Xorg libc-2.28.so [.] memmove_avx_unaligned_erms 0.89% gnome-shell libgobject-2.0.so.0.5600.4 [.] g_object_unref 0.87% kswapd0 [kernel.kallsyms] [k] page_referenced_one 0.86% gnome-shell libc-2.28.so [.] memmove_avx_unaligned_erms 0.83% Xorg [kernel.kallsyms]…13.6. 将 perf 记录附加到正在运行的进程
- 要点:您可以将 perf 记录附加到一个正在运行的进程。这指示 perf 记录只抽样和记录指定进程中的性能数据。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:将 perf record 附加到正在运行的进程中: $ perf record -p ID1,ID2 sleep seconds 此命令抽样并记录进程 ID 为 ID1 和 ID2 的进程在 sleep 命令指定的 seconds 秒时间段内的性能数据。您还可以配置 perf 来记录特定线程中的事件: $ perf record -t ID1,ID2 sleep seconds 注意 当使用 -t 标志和处理线程 ID 时,perf 会默认禁用继承功能。您可以通过添加 --inherit 选项来启用继承性。
- 命令/配置摘录:
$ perf record -p ID1,ID2 sleep seconds
$ perf record -t ID1,ID2 sleep seconds- 注意:注意 当使用 -t 标志和处理线程 ID 时,perf 会默认禁用继承功能。您可以通过添加 --inherit 选项来启用继承性。
13.7. perf 报告输出的解释
- 要点:运行 perf report 命令显示的表会将数据排序到以下几列中:
13.8. 生成一个在不同设备上可读的 perf.data 文件
- 要点:您可以使用 perf 工具将性能数据记录到 perf.data 文件中,以便在不同的设备上分析。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:已安装内核 debuginfo 软件包。如需更多信息,请参阅 使用 GDB 获取应用程序的 debuginfo 软件包或库。
- 列表:捕获您需要进一步调查的性能数据: # perf record -a --call-graph fp sleep <seconds> 这个示例生成一个整个系统在使用 sleep 命令指定的 seconds 秒时间段内的 perf.data 。它还将使用数据框架指针方法捕获调用图形数据。
- 列表:生成包含记录数据的 debug 符号的归档文件: # perf archive
- 列表:验证存档文件是否已在您的当前活跃目录中生成: # ls perf.data* 输出中将显示以 perf.data 开头的每个文件。归档文件将被命名为:perf.data.tar.gz 或 perf.data.tar.bz2。
- 列表:使用 perf 记录和分析性能配置文件
- 命令/配置摘录:
# perf record -a --call-graph fp sleep <seconds>
# perf archive13.9. 从不同的设备分析 perf.data 文件
- 要点:您可以使用 perf 工具分析在不同设备上生成的 perf.data 文件。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:您有 perf.data 和关联的存档文件在不同的设备上生成的。
- 列表:将 perf.data 文件和存档文件复制到您当前的活跃目录中。
- 列表:将存档文件提取到 ~/.debug 中: # mkdir -p ~/.debug # tar xf perf.data.tar.bz2 -C ~/.debug 注意 归档文件可能也被命名为 perf.data.tar.gz。
- 列表:打开 perf.data 文件以进一步分析: # perf report
- 列表:使用调试信息启用调试
- 命令/配置摘录:
# mkdir -p ~/.debug
# tar xf perf.data.tar.bz2 -C ~/.debug- 注意:注意 归档文件可能也被命名为 perf.data.tar.gz。
第 14 章 使用 perf 调查繁忙的 CPU
- 要点:在调查系统上的性能问题时,请使用 perf 来识别和监控总线 CPU。这可帮助您专注于您的努力。
14.1. 显示使用 perf stat 记录的 CPU 事件
- 要点:您可以使用 perf stat 来显示因为禁用 CPU 计数聚而被计算的 CPU 事件。您必须使用 -a 标志记录系统范围模式下的事件,才能使用此功能。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:计算禁用 CPU 数聚合的事件: # perf stat -a -A sleep seconds 此命令以升序方式(从 CPU0 开始)显示每个 CPU 上使用 sleep 命令指定的 seconds 秒时间段内记录的常用硬件和软件事件默认集合数。因此,它可以用于指定一个事件(如周期): # perf stat -a -A -e cycles sleep seconds
- 命令/配置摘录:
# perf stat -a -A sleep seconds
# perf stat -a -A -e cycles sleep seconds14.2. 显示使用 perf report 采集的 CPU 样本
- 要点:perf record 命令对性能数据进行抽样,并将其存储在 perf.data 文件中。您可以使用 perf report 命令来读取此文件。perf record 命令也会记录在其上采样的 CPU。要查看此信息,请相应地配置 perf report 命令。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:在当前目录中有一个使用 perf record 创建的 perf.data 文件。如果 perf.data 文件是使用 root 访问权限创建的,则也需要使用 root 访问权限运行 perf report。
- 列表:显示 perf.data 文件的内容用于进一步分析,按 CPU 排序: # perf report --sort cpu 您可以按 CPU 和命令排序,以显示消耗的 CPU 时间的更多详细信息: # perf report --sort cpu,comm 这个示例将按开销使用量降序列出所有受监控 CPU 的命令,并确定命令运行的 CPU。
- 列表:您可以按 CPU 和命令排序,以显示消耗的 CPU 时间的更多详细信息: # perf report --sort cpu,comm 这个示例将按开销使用量降序列出所有受监控 CPU 的命令,并确定命令运行的 CPU。
- 列表:使用 perf 记录和分析性能配置文件
- 命令/配置摘录:
# perf report --sort cpu
# perf report --sort cpu,comm14.3. 使用 perf top 在性能分析期间显示特定 CPU
- 要点:您可以在实时分析系统时,配置 perf top 来显示特定的 CPU 及其相对使用量。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:启动 perf top 界面,同时按 CPU 排序: # perf top --sort cpu 此命令以开销使用情况的降序方式列出实时的 CPU 及其对应的开销。您可以按 CPU 和命令排序,以了解 CPU 时间被消耗在什么地方: # perf top --sort cpu,comm 此命令根据开销使用量降序列出命令,并确定命令实时运行的 CPU。
- 命令/配置摘录:
# perf top --sort cpu
# perf top --sort cpu,comm14.4. 使用 perf record 和 perf report 监控特定的 CPU
- 要点:使用 perf 来对特定 CPU 的性能数据进行抽样,并分析结果来识别特定于 CPU 的瓶颈。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:记录特定 CPU 中的性能数据: 使用 perf record 的 -C 选项来针对特定的 CPU。以下示例演示了如何指定单个 CPU 或范围。 要从所选 CPU (以逗号分开)中抽样数据: # perf record -C 0,1 sleep <seconds> 此命令抽样并记录指定秒数内 CPU 0 和 1 中的性能数据。 抽样一系列 CPU 中的数据: # perf record -C 0-2 sleep <seconds> 此命令抽样并记录指定时间内 CPU 0、1 和 2 中的性能数据。
- 列表:要从所选 CPU (以逗号分开)中抽样数据: # perf record -C 0,1 sleep <seconds> 此命令抽样并记录指定秒数内 CPU 0 和 1 中的性能数据。
- 列表:抽样一系列 CPU 中的数据: # perf record -C 0-2 sleep <seconds> 此命令抽样并记录指定时间内 CPU 0、1 和 2 中的性能数据。
- 列表:分析记录的性能数据: 使用 perf report 命令读取和分析 perf.data 文件。 # perf report 此命令显示 perf.data 文件的内容。 注意 如果要查看每个采样是记录的哪个 CPU,请参阅使用 perf report 显示采集哪些 CPU 样本。
- 命令/配置摘录:
# perf record -C 0,1 sleep <seconds>
# perf record -C 0-2 sleep <seconds>- 注意:注意 如果要查看每个采样是记录的哪个 CPU,请参阅使用 perf report 显示采集哪些 CPU 样本。
第 15 章 使用 perf 创建 uprobes
- 要点:uprobes (用户空间探测)在运行时为用户空间应用程序提供动态工具。它们不需要更改或重新编译。
- 要点:uprobes 有两种有用的用例:
15.1. 在功能级别使用 perf 创建 uprobes
- 要点:使用 perf 工具在进程或应用程序的任意点创建动态追踪点。通过 perf stat 或 perf record 使用这些追踪点来分析进程和应用程序行为。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:在对进程或应用程序感兴趣的位置监控的进程或应用程序中创建 uprobe: # perf probe -x /path/to/executable -a function Added new event: probe_executable:function (on function in /path/to/executable) You can now use it in all perf tools, such as: perf record -e probe_executable:function -aR sleep 1
- 列表:使用 perf 记录和分析性能配置文件
- 列表:使用 perf stat 在进程执行过程中计算事件
- 命令/配置摘录:
# perf probe -x /path/to/executable -a function
Added new event: probe_executable:function (on function in /path/to/executable) You can now use it in all perf tools, such as: perf record -e probe_executable:function -aR sleep 115.2. 在带有 perf 的函数内创建 uprobes
- 要点:您可以将追踪点与其他 perf 工具(如 perf stat 和 perf 记录 )结合使用,以更好地理解进程或应用程序行为。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:您已收到可执行文件的调试符号: # objdump -t ./your_executable | head 注意 要做到这一点,请安装 可执行文件的 debuginfo 软件包。如果可执行文件是本地开发的应用程序,请使用 GCC 中的 -g 选项使用调试信息编译应用程序。
- 列表:查看可以放置 uprobe 的功能行: $ perf probe -x ./your_executable -L main <main@/home/user/my_executable:0> 0 int main(int argc, const char *argv) 1 { int err; const char *cmd; char sbuf[STRERR_BUFSIZE]; / libsubcmd init */ 7 exec_cmd_init("perf", PREFIX, PERF_EXEC_PATH, EXEC_PATH_ENVIRONMENT); 8 pager_init(PERF_PAGER_ENVIRONME…
- 列表:为您要监控的功能行创建 uprobe : # perf probe -x ./my_executable main:8 Added new event: probe_my_executable:main_L8 (on main:8 in /home/user/my_executable) you can now use it in all perf tools, such as: Perf record -e probe_my_executable:main_L8 -aR sleep 1
- 命令/配置摘录:
# objdump -t ./your_executable | head
$ perf probe -x ./your_executable -L main- 注意:注意 要做到这一点,请安装 可执行文件的 debuginfo 软件包。如果可执行文件是本地开发的应用程序,请使用 GCC 中的 -g 选项使用调试信息编译应用程序。
15.3. 通过 uprobes 记录的数据 perf 脚本输出
- 要点:分析 uprobes 收集的数据的常见方法是运行 perf script 命令。它读取 perf.data 文件,并显示记录的工作负载的详细追踪。
- 要点:a 是添加到 uprobe 的一个函数参数。或者,a 可以是您添加 uprobe 的代码范围内的一个可见的任意变量:
- 列表:在名为 my_prog 的程序中,uprobe 被添加到函数 isprime() 中
- 列表:a 是添加到 uprobe 的一个函数参数。或者,a 可以是您添加 uprobe 的代码范围内的一个可见的任意变量: # perf script my_prog 1367 [007] 10802159.906593: probe_my_prog:isprime: (400551) a=2 my_prog 1367 [007] 10802159.906623: probe_my_prog:isprime: (400551) a=3 my_prog 1367 [007] 10802159.906625: probe_my_prog:isprime: (400551) a=4 my_prog 1367 [007] 1080215…
- 命令/配置摘录:
# perf script
my_prog 1367 [007] 10802159.906593: probe_my_prog:isprime: (400551) a=2 my_prog 1367 [007] 10802159.906623: probe_my_prog:isprime: (400551) a=3 my_prog 1367 [007] 10802159.906625: probe_my_prog:isprime: (400551) a=4 my_prog 1367 [007] 10802159.906627: probe_my_prog:isprime: (400551) a=5 my_prog 1367 [007] 10802159.906629: probe_my_prog:isprime: (400551) a=6 my_prog 1367 [007] 10802159.906631: probe_my_prog:isprime: (400551) a=7 my_prog 1367 [007] 10802159.906633: probe_my_prog:isprime: (400551) a=13 my_prog 1367 [007] 10802159.906635: probe_my_prog:isprime: (400551) a=17 my_prog 1367 [007] 10802159.906637: probe_my_prog:isprime: (400…第 16 章 使用 perf mem 分析内存访问
- 要点:您可以使用 perf mem 命令对系统上的内存访问进行示例。perf 工具的 mem 子命令启用内存访问抽样(加载和存储)。
- 要点:perf mem 命令跟踪内存延迟、访问类型和缓存命中。记录数据符号也会识别这些事件的内存位置。
16.1. 使用 perf mem 抽样内存访问
- 要点:您可以使用 perf mem 命令对系统上的内存访问进行示例。命令使用与 perf record 和 perf report 相同的选项,以及一些专用于 mem 子命令的选项。记录的数据保存在当前目录中的 perf.data 文件中,以便稍后进行分析。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:内存访问示例: # perf mem record -a sleep <seconds> 此命令抽样 sleep 命令指定的 <seconds> 秒内的所有 CPU 中的内存访问。您可以替换您要在其中示例内存访问数据的任何命令的 sleep 命令。默认情况下,perf mem 样本会加载和存储。您可以使用 -t 选项来只选择一个内存操作,并在 perf mem 和 record 之间指定 load 或 store。对于负载,捕获内存层次结构级别的信息、TLB 内存访问、总线 snoops 和内存锁定。
- 列表:打开 perf.data 文件进行分析: # perf mem report 如果您使用了示例命令,输出为: Available samples 35k cpu/mem-loads,ldlat=30/P 54k cpu/mem-stores/P cpu/mem-loads,ldlat=30/P 行表示通过内存负载收集的数据,cpu/mem-stores/P 行表示通过内存存储收集的数据。突出显示感兴趣的类别,然后按 Enter 键以查看数据: Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 4067062 Overhead Sampl…
- 列表:可选:对结果进行排序,以便在显示数据时调查您感兴趣的不同方面。例如,在抽样周期内按类型内存访问对内存负载进行排序,以降低其帐户的开销: # perf mem -t load report --sort=mem 例如,输出可以是: Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 40670 Overhead Samples Memory access 31.53% 9725 LFB or LFB hit 29.70% 12201 L1 or L1 hit 23.03% 9725 L3 or L3 hit 12.91% 2316 …
- 命令/配置摘录:
# perf mem record -a sleep <seconds>
# perf mem report16.2. perf mem 报告输出的解释
- 要点:当您运行没有任何修饰符的 perf mem report 命令时,会将数据排序到几列中:
- 要点:显示行目标的内存位置的地址。
- 注意:重要 Data Symbol 列可能会因为内存动态分配或访问内存堆栈而显示一个原始地址。
第 17 章 检测错误共享
- 要点:当 Symmetric Multi Processing (SMP)系统上的处理器核心修改同一缓存行上的不同数据项时,会发生错误共享。这些处理器访问处理器之间没有共享的其他数据项。
- 要点:修改后的缓存行强制其他处理器无效和更新其副本,即使它们不需要修改的数据。
17.1. perf c2c 的目的
- 要点:perf 工具的 c2c 子命令启用 Shared Data Cache-to-Cache (C2C) 分析。您可以使用 perf c2c 命令检查 cache-line contention 来检测 true 和 false 共享。
- 要点:当处理器内核修改由其他处理器共享的缓存行中的数据时,缓存行争用发生。使用这个缓存行的所有其他处理器都必须使其副本无效,并请求更新了一个。这会导致性能下降。
- 列表:缓存被检测到竞争的行
- 列表:读取和写入数据的进程
- 列表:导致竞争的说明
- 列表:涉及内容的 Non-Uniform Memory Access (NUMA) 节点
17.2. 使用 perf c2c 检测缓存行竞争
- 要点:您可以使用 perf c2c 命令检测系统中的缓存行争用。perf c2c 命令支持与 perf record 相同的选项,以及 c2c 子命令的一些选项。记录的数据保存在当前目录中的 perf.data 文件中,以便稍后进行分析。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:使用 perf c2c 检测缓存行争用: # perf c2c record -a sleep <seconds> 这个命令抽样并记录 sleep 命令指定的 <seconds> 时间段内的所有 CPU 的缓存行争用数据。您可以使用您要收集缓存数据的任何命令替换 sleep 命令。
- 命令/配置摘录:
# perf c2c record -a sleep <seconds>17.3. 视觉化使用 perf c2c 记录所记录的 perf.data 文件
- 要点:您可以可视化 perf c2c 命令记录的 perf.data 文件。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:使用 perf c2c 命令记录的 perf.data 文件位于当前目录中。如需更多信息,请参阅使用 perf c2c 检测缓存行争用。
- 列表:打开 perf.data 文件进行分析: # perf c2c report --stdio 这个命令将 perf.data 文件视觉化到命令行中的多个图形中: ================================================= Trace Event Information ================================================= Total records : 329219 Locked Load/Store Operations : 14654 Load Operations : 69679 Loads - uncacheable : 0 …
- 命令/配置摘录:
# perf c2c report --stdio
================================================= Trace Event Information ================================================= Total records : 329219 Locked Load/Store Operations : 14654 Load Operations : 69679 Loads - uncacheable : 0 Loads - IO : 0 Loads - Miss : 3972 Loads - no mapping : 0 Load Fill Buffer Hit : 11958 Load L1D hit : 17235 Load L2D hit : 21 Load LLC hit : 14219 Load Local HITM : 3402 Load Remote HITM : 12757 Load Remote HIT : 5295 Load Local DRAM : 976 Load Remote DRAM : 3246 Load MESI State Exclusive : 4222 Load MESI State Shared : 0 Load LLC Misses : 22274 LLC Misses to Local DRAM : 4.4% LLC Misses to R…17.4. perf c2c 报告输出的解释
- 要点:运行 perf c2c report --stdio 命令显示的视觉化会将数据排序为几个表格中:
- 要点:提供有关每个发生争用的每个缓存行的各种信息:
- 列表:缓存行在 NUM 列中编号,从 0 开始。
- 列表:每个缓存行的虚拟地址都包含在 Data address Offset 列中。然后,它随后会偏移到发生不同访问权限的缓存行中。
- 列表:Pid 列包含进程 ID。
- 列表:Code Address 列包含指令指针代码地址。
- 列表:cycles 标签下的列显示平均负载延迟。
- 列表:cpu cnt 列显示样本来自多少个不同的 CPU 。这是等待该给定位置上索引的数据的不同 CPU 数量。
17.5. 使用 perf c2c 检测错误共享
- 要点:您可以使用 perf c2c 命令检测错误共享。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:使用 perf c2c 命令记录的 perf.data 文件位于当前目录中。如需更多信息,请参阅使用 perf c2c 检测缓存行争用。
- 列表:打开 perf.data 文件: # perf c2c report --stdio 这会在命令行中打开 perf.data 文件。
- 列表:在 Trace Event Information 表中,找到包含 LLC Misses to Remote Cache(HITM)的值的行: LLC Misses to Remote Cache (HITM) 行的值列中的百分比表示在修改后的缓存行中跨 NUMA 节点发生的 LLC 未命中百分比,这是发生错误共享的一个关键指标。 ================================================= Trace Event Information ================================================= Total records : 329219 Lo…
- 列表:检查 Shared Data Cache Line Table 的 LLC Load Hitm 字段的 Rmt 列: ================================================= Shared Data Cache Line Table ================================================= # # Total Rmt ----- LLC Load Hitm ----- ---- Store Reference ---- --- Load Dram ---- LLC Total ----- Core Load Hit ----- -- LLC …
- 命令/配置摘录:
# perf c2c report --stdio
================================================= Trace Event Information ================================================= Total records : 329219 Locked Load/Store Operations : 14654 Load Operations : 69679 Loads - uncacheable : 0 Loads - IO : 0 Loads - Miss : 3972 Loads - no mapping : 0 Load Fill Buffer Hit : 11958 Load L1D hit : 17235 Load L2D hit : 21 Load LLC hit : 14219 Load Local HITM : 3402 Load Remote HITM : 12757 Load Remote HIT : 5295 Load Local DRAM : 976 Load Remote DRAM : 3246 Load MESI State Exclusive : 4222 Load MESI State Shared : 0 Load LLC Misses : 22274 LLC Misses to Local DRAM : 4.4% LLC Misses to R…第 18 章 flamegraphs 入门
- 要点:作为系统管理员,您可以使用 flamgraphs 创建使用 perf 工具记录的系统性能数据的可视化。作为软件开发人员,您可以使用 flamegraphs 创建使用 perf 工具记录的应用程序性能数据的可视化。
- 要点:抽样堆栈追踪是使用 perf 工具分析 CPU 性能的常见技术。通过可视化,您可以快速识别热点代码路径,因为来自性能的堆栈跟踪分析结果可能非常笨重,而且分析起来需要大量人力。
18.1. 安装 flamegraphs
- 要点:您必须安装所需软件包才能开始使用 flamegraphs 。
- 要点:流程
- 列表:安装 flamegraphs 软件包: # dnf install js-d3-flame-graph
- 命令/配置摘录:
# dnf install js-d3-flame-graph18.2. 在整个系统中创建 flamegraphs
- 要点:您可以使用 flamegraphs 来可视化整个系统记录的性能数据。
- 要点:先决条件
- 列表:如安装 flamegraphs 所述 安装 flamegraphs。
- 列表:安装 perf 工具,如 安装 perf 所述。
- 列表:记录数据并创建可视化。 # perf script flamegraph -a -F 99 sleep 60 此命令对整个系统进行 60 秒(如使用 sleep 命令确定的)的性能数据的抽样和记录,然后将当前活动目录中保存的可视化构建为 flamegraph.html。命令默认示例调用数据,并在特定情况下使用与 perf 工具相同的参数: -a 保证记录整个系统的数据。 -F 设置每秒抽样频率。
- 列表:要分析,请查看生成的视觉化: # xdg-open flamegraph.html 这个命令在默认浏览器中打开视觉化:
- 命令/配置摘录:
# perf script flamegraph -a -F 99 sleep 60
# xdg-open flamegraph.html18.3. 在特定进程中创建 flamegraphs
- 要点:您可以使用 flamegraphs 来视觉化在特定运行中的进程中记录的性能数据。
- 要点:先决条件
- 列表:如安装 flamegraphs 所述 安装 flamegraphs。
- 列表:安装 perf 工具,如 安装 perf 所述。
- 列表:记录数据并创建可视化。 # perf script flamegraph -a -F 99 -p ID1,ID2 sleep 60 此命令抽样并记录进程 ID 为 ID1 和 ID2 的 60 秒(使用 sleep 命令确定)的性能数据,然后构建可视化,其将以 flamegraph.html 形式保存在当前活动目录中。命令默认示例调用数据,并在特定情况下使用与 perf 工具相同的参数: -a 保证记录整个系统的数据。 -F 设置每秒抽样频率。 -p 要推断特定进程 ID 的示例并记录数据。
- 列表:要分析,请查看生成的视觉化: # xdg-open flamegraph.html 这个命令在默认浏览器中打开视觉化:
- 命令/配置摘录:
# perf script flamegraph -a -F 99 -p ID1,ID2 sleep 60
# xdg-open flamegraph.html18.4. 在 flamegraphs 中分析堆栈追踪和功能热点
- 要点:flamegraph 中的每个框代表堆栈中的不同函数。y-axis 显示堆栈深度。每个堆栈的顶部框代表 CPU 上的功能,其余框代表 ancestry。x-axis 显示抽样的 call-graph 数据的规模。
- 要点:在 flame 图中,x-axis 按示例计数而不是时间排序功能。子项以其总样本降序排列。框宽度代表 CPU 上的频率。更广泛的框表示在更多示例中捕获的功能或祖先。
- 列表:要显示之前未显示的函数的名称,并进一步调查数据,请点击 flamegraph 中的框来缩放给定位置的堆栈:
- 列表:要返回 flamegraph 的默认视图,请点 Reset Zoom。 重要 代表用户空间函数的框可以在 flamegraphs 中被标记为 Unknown,因为函数的二进制文件已被剥离。安装 debuginfo 软件包,或在启用了调试信息的情况下编译本地应用程序。使用 GCC 中的 -g 选项,在这种情形中显示功能名称或符号。
- 列表:使用调试信息启用调试
- 注意:重要 代表用户空间函数的框可以在 flamegraphs 中被标记为 Unknown,因为函数的二进制文件已被剥离。安装 debuginfo 软件包,或在启用了调试信息的情况下编译本地应用程序。使用 GCC 中的 -g 选项,在这种情形中显示功能名称或符号。
第 19 章 使用 perf 循环缓冲监控性能瓶颈的进程
- 要点:您可以创建环形缓冲,使用 perf 工具获取特定于事件的数据快照。使用它们监控您系统上运行的特定进程或部分应用程序的性能瓶颈。
- 要点:在这种情况下,perf 仅将数据写入 perf.data 文件,以便在检测到指定事件时进行后续分析。
19.1. 循环缓冲区和使用 perf 的特定于事件的快照
- 要点:在特定事件前记录 perf 数据的小时可能会导致过量消耗或证明不现实进行分析。在这种情况下,使用 perf record 创建自定义环形缓冲,该缓冲区在特定事件后执行快照。
- 要点:--overwrite 选项使 perf record 将所有数据存储在可覆盖循环缓冲区中。当缓冲区已满时,perf record 会自动覆盖最旧的记录,因此这些记录永远不会被写入到 perf.data 文件。
19.2. 通过 perf 循环缓冲区收集特定数据,来监控性能瓶颈
- 要点:使用 perf 工具,您可以创建循环缓冲。它们由您指定的事件触发,以只收集您感兴趣的数据。要创建收集事件数据的循环缓冲,请将 --overwrite 和 --switch-output-event 选项用于 perf。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:您已在您感兴趣的进程或应用程序中,在您感兴趣的流程或应用程序中的某个位置放置了一个 uprobe : # perf probe -x </path/to/executable> -a function Added new event: probe_executable:function (on function in /path/to/executable) You can now use it in all perf tools, such as: perf record -e probe_executable:function -aR sleep 1
- 列表:使用 uprobe 作为一个触发事件来创建循环缓冲: # perf record --overwrite -e cycles --switch-output-event probe_executable:function ./executable [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2021021012231959 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2021021012232008 ] [ perf …
- 命令/配置摘录:
# perf probe -x </path/to/executable> -a function
Added new event: probe_executable:function (on function in /path/to/executable) You can now use it in all perf tools, such as: perf record -e probe_executable:function -aR sleep 1第 20 章 使用 perf 收集器管理追踪点,而无需重启 perf
- 要点:使用控制管道接口管理正在运行的 perf 收集器中的不同追踪点。您可以动态调整收集的数据,而无需停止或重启 perf。这可防止在停止或重启记录进程时发生的性能数据丢失。
20.1. 在没有停止或重启 perf 的情况下向正在运行的 perf 添加追踪点
- 要点:您可以使用控制管道接口向正在运行的 perf 收集器添加追踪点。perf 调整记录的数据而无需停止 perf,从而防止性能数据丢失。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:配置控制管道接口: # mkfifo control ack perf.pipe
- 列表:使用您启用的控制文件配置和事件运行 perf 记录 : # perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:' -o - > perf.pipe 在本例中,在 -e 选项后声明 'sched:' 使用调度程序事件启动 perf record。
- 列表:在第二个命令行中,启动控制管道的读取侧: # cat perf.pipe | perf --no-pager script -i -
- 列表:启动控制管道的读取侧会在第一行中触发以下信息: Events disabled
- 列表:在第三个命令行中,使用控制文件启用追踪点: # echo 'enable sched:sched_process_fork' > control 此命令触发 perf,以扫描控制文件中针对声明的事件扫描当前事件列表。如果事件存在,则会启用追踪点,并在第一行中显示以下消息: event sched:sched_process_fork enabled
- 命令/配置摘录:
# mkfifo control ack perf.pipe
# perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:*' -o - > perf.pipe20.2. 在不停止或重启 perf 的情况下从正在运行的 perf 收集器中除追踪点
- 要点:您可以使用控制管道接口从正在运行的 perf 收集器中删除追踪点。它有助于减少收集的数据范围,而无需停止 perf 并丢失性能数据。
- 要点:先决条件
- 列表:您已安装了 perf 用户空间工具。如需更多信息,请参阅安装 perf。
- 列表:您已使用控制管道接口向正在运行的 perf 收集器添加了追踪点。如需更多信息,请参阅 在不停止或重启 perf 的情况下向正在运行的 perf 收集器添加追踪点。
- 列表:删除追踪点: # echo 'disable sched:sched_process_fork' > control 本例假设您之前已将调度程序事件加载到控制文件中,并启用 tracepoint sched_process_fork。 此命令触发 perf,以扫描控制文件中针对声明的事件扫描当前事件列表。如果找到,追踪点会被禁用,并在用于配置控制管道的命令行中显示以下消息: # event sched:sched_process_fork disabled
- 命令/配置摘录:
# echo 'disable sched:sched_process_fork' > control
# event sched:sched_process_fork disabled第 21 章 在 web 控制台中优化系统性能
- 要点:您可以在 RHEL web 控制台中设置性能配置文件,以便为所选任务优化系统性能。
21.1. Web 控制台中的性能调优选项
- 要点:Red Hat Enterprise Linux 提供多个性能优化的性能配置集:
- 要点:TuneD 服务优化系统选项,以匹配所选的配置文件。在 web 控制台中,您可以设置系统的性能配置文件。
- 列表:使用桌面的系统
- 列表:吞吐性能
- 列表:延迟性能
- 列表:网络性能
- 列表:低功耗
- 列表:虚拟机
21.2. 在 Web 控制台中设置性能配置文件
- 要点:根据您要执行的任务,使用 Web 控制台通过设置合适的配置集来优化系统性能。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:点 Overview。
- 列表:在 Configuration 部分中,点当前的性能配置文件。
- 列表:在 Change performance profile 对话框中设置所需的配置文件。
- 列表:点 Change profile。
21.3. 使用 Web 控制台监控本地系统的性能
- 要点:RHEL web 控制台使用 Utilization Saturation 和 Errors (USE)方法进行故障排除。性能指标页面提供了一个 chronological 历史视图,它首先带有最新的数据。在 Metrics 和 history 页面中,您可以查看事件、错误、利用率和饱和度图。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:cockpit-pcp 软件包已安装。
- 列表:Performance Co-Pilot (PCP)服务 pmlogger.service 和 pmproxy.service 已启用并在运行。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:点 Overview。
- 列表:在 Usage 部分中,点 View metrics and history。 Metrics and history 部分会打开并显示:在用户指定的时间间隔内图形形式的 当前系统配置和使用情况 性能指标
21.4. 使用 Web 控制台和 Grafana 监控多个系统的性能
- 要点:Grafana 以图形方式聚合多个系统的数据,以图形方式视觉化其 Performance Co-Pilot (PCP)指标。您可以在 web 控制台界面中为多个系统配置性能指标监控和导出。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已安装了 cockpit-pcp 软件包。
- 列表:Performance Co-Pilot (PCP)服务 pmlogger.service 和 pmproxy.service 已启用并在运行。
- 列表:您已配置了 Grafana 仪表板。如需更多信息 ,请参阅配置 grafana-server。
- 列表:您已安装了 valkey 软件包。 另外,您可以在稍后的流程中从 Web 控制台界面安装软件包。
- 列表:登录到 RHEL 10 web 控制台。
- 注意:重要 在您要监控其性能的所有系统上重复此流程。
第 22 章 使用 BPF Compiler Collection 分析系统性能
- 要点:BPF Compiler Collection (BCC)使用 Berkeley Packet Filter (BPF)功能分析系统性能,以运行自定义内核程序。BCC 访问系统事件,用于性能监控、追踪和调试 BPF 程序,提供用于提取系统分析的工具和库。
22.1. 安装 bcc-tools 软件包
- 要点:您可以安装 bcc-tools 软件包来获取 BPF Compiler Collection (BCC)库和相关工具。
- 要点:流程
- 列表:安装 bcc-tools。 # dnf install bcc-tools BCC 工具安装在 /usr/share/bcc/tools/ 目录中。
- 列表:检查安装的工具。 # ls -l /usr/share/bcc/tools/ 此时会显示安装的工具的列表。列表中的 doc 目录为每个工具提供了文档。
- 命令/配置摘录:
# dnf install bcc-tools
# ls -l /usr/share/bcc/tools/22.2. 使用 execsnoop 检查系统进程
- 要点:BCC 套件的 execsnoop 工具捕获并实时显示新的进程执行事件。它用于观察系统上正在执行哪些命令或二进制文件,以帮助进行调试、审计和安全监控。
- 要点:流程
- 列表:在一个命令行中运行 execsnoop 程序: # /usr/share/bcc/tools/execsnoop
- 列表:要创建 ls 命令的简短进程,在另一个命令行中,请输入: $ ls /usr/share/bcc/tools/doc/ 运行 execsnoop 的命令行显示以下输出: PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ execsnoop 程序打印消耗系统资源的每个新进程的输出行。它甚至会检测很快运行的程序(如 ls )的进程,大多数监控工具也不会进行注册。execsnoop 输出显示以下字段: PCOMM 父进程名称。(ls) PID 进程 ID。(8382) PPID 父进程 ID。(8287) R…
- 命令/配置摘录:
# /usr/share/bcc/tools/execsnoop
$ ls /usr/share/bcc/tools/doc/22.3. 跟踪 opensnoop 命令打开的文件
- 要点:使用 BPF Compiler Collection (BCC)中的 opensnoop 工具,实时监控和日志文件访问。这对于调试、审核或了解应用程序的运行时行为很有用。
- 要点:流程
- 列表:在一个命令行中,运行 opensnoop 程序,以打印仅由 uname 命令进程打开的文件的输出: # /usr/share/bcc/tools/opensnoop -n uname
- 列表:在另一个命令行中,输入命令来打开某些文件: $ uname The command line running opensnoop shows the output similar to the following: PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ... opensnoop 程序监视整个系统的 open() 系统调用,并为 uname 尝试打开的每个文件打印一行输出。opensnoop 输出显示以下字段:…
- 命令/配置摘录:
# /usr/share/bcc/tools/opensnoop -n uname
$ uname22.4. 使用 biotop 监控磁盘上执行 I/O 操作的靠前的进程
- 要点:biotop 工具提供产生最多磁盘 I/O 活动的进程的实时视图。它标识了高磁盘使用应用程序,作为性能监控和故障排除的工具。
- 要点:流程
- 列表:在一个命令行中使用 30 作为参数运行 biotop 程序,以生成 30 秒概述: # /usr/share/bcc/tools/biotop 30 当您不提供任何参数时,输出屏幕默认每 1 秒刷新一次。
- 列表:在另一个命令行中,输入命令从本地硬盘设备读取内容并将输出写入 /dev/zero 文件: # dd if=/dev/vda of=/dev/zero 此步骤会生成特定的 I/O 流量来演示 biotop。运行 biotop 的命令行显示类似如下的输出: PID COMM D MAJ MIN DISK I/O Kbytes AVGms 9568 dd R 252 0 vda 16294 14440636.0 3.69 48 kswapd0 W 252 0 vda 1763 120696.0 1.65 7571 gnome-shell R 252 0 vda 834 83612.0 0.33 1891 gnome-shell R 25…
- 命令/配置摘录:
# /usr/share/bcc/tools/biotop 30
# dd if=/dev/vda of=/dev/zero22.5. 使用 xfsslower 公开异常慢的文件系统操作
- 要点:xfsslower 测量 XFS 文件系统执行读、写、打开或同步 (fsync) 操作所花费的时间。参数 1 确保程序仅显示比 1 ms 慢的操作。
- 要点:流程
- 列表:在一个命令行中运行 xfsslower 程序: # /usr/share/bcc/tools/xfsslower 1 当您不提供任何参数时,xfsslower 默认会显示比 10 ms 慢的操作。
- 列表:在另一个命令行中使用 vim 来创建文本文件,以开始与 XFS 文件系统交互: $ vim text The command line running xfsslower shows something similar upon saving the file from the previous step: TIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 13:07:14 b'bash' 4754 R 256 0 7.11 b'vim' 13:07:14 b'vim' 4754 R 832 0 4.03 b'libgpm.so.2.1.0' 13:07:14 b'vim' 4754 R …
- 列表:Read
- 列表:Write
- 列表:Open
- 列表:Sync
- 命令/配置摘录:
# /usr/share/bcc/tools/xfsslower 1
$ vim text第 23 章 配置操作系统以优化 CPU 使用率
- 要点:您可以配置操作系统来优化跨工作负载的 CPU 使用率。
23.1. 监控和诊断处理器问题的工具
- 要点:以下是 Red Hat Enterprise Linux 中用于监控并诊断处理器相关性能问题的工具:
- 要点:pqos 程序在 intel-cmt-cat 软件包中提供。它监控最近 Intel 处理器上的 CPU 缓存和内存带宽。它监控以下类型的信息:
- 列表:numactl 实用程序提供了多个选项来管理处理器和内存关联性。numactl 软件包包含 libnuma 库,后者为内核支持的 NUMA 策略提供一个简单的编程接口,可用于比 numactl 应用程序更精细的调优。
- 列表:numad 是一个自动 NUMA 关联性管理守护进程。它监控系统中的 NUMA 拓扑和资源使用情况,来动态改进 NUMA 资源分配和管理。
- 列表:numastat 工具显示操作系统及其进程的每个 NUMA 节点内存统计信息,并向管理员显示进程内存是分散在整个系统还是集中在特定的节点上。此工具由 numactl 软件包提供。
- 列表:pqos 程序在 intel-cmt-cat 软件包中提供。它监控最近 Intel 处理器上的 CPU 缓存和内存带宽。它监控以下类型的信息: 每周期指令数(IPC) 最后一级缓存的未命中数 在 LLC 中给定 CPU occupies 中运行的程序的大小(以 KB 为单位) 本地内存的带宽(MBL) 远程内存的带宽(MBR)
- 列表:每周期指令数(IPC)
- 列表:最后一级缓存的未命中数
23.2. 系统拓扑类型
- 要点:在现代计算中,单个 CPU 的概念具有误导性,因为大多数现代系统有多个处理器。系统的拓扑是这些处理器互相连接并与其他系统资源的连接的方式。
- 要点:这会影响系统和应用程序性能,以及对系统的调优考虑。
- 列表:如果多个应用程序线程访问同一缓存的数据,则将这些线程配置为在同一处理器上运行。
- 列表:如果多个访问和缓存不同数据在同一处理器上运行的线程,每个线程可能会驱除由之前线程访问的缓存数据。这意味着,每个线程"misses"缓存,浪费执行时间从内存中获取数据并在缓存中替换。使用 perf 工具检查是否有过多的缓存未命中。
23.3. 显示系统拓扑
- 要点:您可以使用多个命令了解系统的拓扑。
- 要点:流程
- 列表:显示系统拓扑概述: $ numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 4 8 12 16 20 24 28 32 36 node 0 size: 65415 MB node 0 free: 43971 MB [...]
- 列表:要收集有关 CPU 架构的信息,如 CPU、线程、内核、插槽和 NUMA 节点的数量: $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 40 On-line CPU(s) list: 0-39 Thread(s) per core: 1 Core(s) per socket: 10 Socket(s): 4 NUMA node(s): 4 Vendor ID: GenuineIntel CPU family: 6 Model: 47 Model name: Intel(R) Xeon(R) C…
- 列表:查看系统的图形表示: # dnf install hwloc-gui # lstopo
- 列表:查看详细文本输出: # dnf install hwloc # lstopo-no-graphics Machine (15GB) Package L#0 + L3 L#0 (8192KB) L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 PU L#0 (P#0) PU L#1 (P#4) HostBridge L#0 PCI 8086:5917 GPU L#0 "renderD128" GPU L#1 "controlD64" GPU L#2 "card0" PCIBridge PCI 8086:24fd Net L#3 "wlp61…
- 命令/配置摘录:
$ numactl --hardware
available: 4 nodes (0-3) node 0 cpus: 0 4 8 12 16 20 24 28 32 36 node 0 size: 65415 MB node 0 free: 43971 MB [...]23.4. 配置内核空循环时间
- 要点:默认情况下,RHEL 使用无空循环内核不会中断空闲 CPU,从而减少功耗并在较新的处理器上启用深度睡眠状态。RHEL 还为对延迟敏感的工作负载(如高性能和实时计算)提供了一个动态无空选项。
- 要点:默认情况下,动态无节拍选项被禁用。您可以使用 cpu-partitioning TuneD 配置文件来为指定为 isolated_cores 的核启用动态无节拍选项。
- 列表:要在特定内核中启用动态无空行为,在内核命令行中使用 nohz_full 参数指定这些核心。例如,在 16 核系统上启用 nohz_full=1-15 内核选项: # grubby --update-kernel=ALL --args="nohz_full=1-15" 这可在核 1 到 15 上启用动态无节拍行为,将所有计时只移到未指定的核(核 0)。
- 列表:当系统引导时,手动将 rcu 线程移到非延迟敏感核,本例中为核 0 : # for i in pgrep rcu[^c] ; do taskset -pc 0 $i ; done
- 列表:可选:在内核命令行中使用 isolcpus 参数,将特定内核与用户空间任务隔离开来。
- 列表:可选:将内核的 write-back bdi-flush 线程的 CPU 关联性设置到 housekeeping 核: echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
- 列表:系统重启后,验证是否启用了 dynticks : # journalctl -xe | grep dynticks Mar 15 18:34:54 rhel-server kernel: NO_HZ: Full dynticks CPUs: 1-15.
- 列表:验证动态无空配置是否正常工作: # perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3 这个命令会在 CPU 1 上测量升级,同时告诉 CPU 1 休眠 3 秒。默认内核计时器配置在常规 CPU 上显示大约 3100 勾号: # perf stat -C 0 -e irq_vectors:local_timer_entry taskset -c 0 sleep 3 Performance counter stats for 'CPU(s) 0': 3,107 irq_vectors:local_timer_entry 3.001342790…
- 命令/配置摘录:
# grubby --update-kernel=ALL --args="nohz_full=1-15"
# for i in pgrep rcu[^c] ; do taskset -pc 0 $i ; done23.5. 中断请求概述
- 要点:中断请求(IRQ)是一种由硬件向处理器发出的需立即处理的信号。系统中的每个设备都被分配了一个或多个 IRQ 号,这允许其发送唯一的中断。
- 要点:启用中断后,接收中断请求的处理器暂停执行当前应用程序线程,以解决中断请求。
- 列表:分配中断亲和性。
- 列表:处理同一内核上相同处理器或处理器的亲和性。
23.6. 手动平衡中断
- 要点:如果 BIOS 导出 Non-Uniform Memory Access (NUMA)拓扑,irqbalance 为请求硬件的节点提供中断请求。
- 要点:流程
- 列表:检查哪些设备对应于您要配置的中断请求。
- 列表:查找平台的硬件规格。检查您系统上的芯片组是否支持分发中断。 如果芯片组支持分发,则您可以配置中断交付,如以下步骤中所述。另外,检查您的芯片组用来平衡中断的算法。有些 BIOS 有一些选项来配置中断交付。 如果芯片组不支持分发,您的芯片组总是可以将所有中断路由到一个静态的 CPU。您无法配置使用哪些 CPU。
- 列表:如果芯片组支持分发,则您可以配置中断交付,如以下步骤中所述。另外,检查您的芯片组用来平衡中断的算法。有些 BIOS 有一些选项来配置中断交付。
- 列表:如果芯片组不支持分发,您的芯片组总是可以将所有中断路由到一个静态的 CPU。您无法配置使用哪些 CPU。
- 列表:检查系统上使用了 Advanced Programmable Interrupt Controller (APIC) 模式: $ journalctl --dmesg | grep APIC 如果您的系统使用 flat 以外的模式,您可以看到一个类似于 Setting APIC routing to physical flat 的行。 如果看不到这个信息,代表您的系统使用 flat 模式。 如果您的系统使用 x2apic 模式,您可以通过将 nox2apic 选项添加到引导装载程序配置中的内核命令行来禁用它。 只有非物理平面模式(flat)支持将中断分发到多个 CPU。这个模式仅适用于有 8 个或更少 CPU 的系统。
- 列表:如果您的系统使用 flat 以外的模式,您可以看到一个类似于 Setting APIC routing to physical flat 的行。
- 命令/配置摘录:
$ journalctl --dmesg | grep APIC23.7. 设置 smp_affinity 掩码
- 要点:smp_affinity 值存储为代表系统中所有处理器的十六进制位掩码。每个位配置不同的 CPU。最重要的位是 CPU 0。掩码的默认值为 f。这意味着中断请求可以在系统中的任何处理器上处理。
- 要点:将 smp_affinity 值设置为 1 表示只有处理器 0 可以处理中断。
- 列表:在二进制代码中,对于处理中断的 CPU 使用值 1。例如,要将 CPU 0 和 CPU 7 设置为处理中断,请使用 0000000010000001 作为二进制代码: Expand 表 23.1. CPU 的二进制位 CPU 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 二进制 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 Show more
- 列表:将二进制代码转换为十六进制代码: 例如,使用 Python 转换二进制代码: >>> hex(int('0000000010000001', 2)) '0x81' 在有 32 个处理器的系统上,您必须限制离散的 32 位组的 smp_affinity 值。例如,如果您只想 64 位处理器系统的第一个 32 个处理器来服务中断请求,请使用 0xffffffff,00000000。
- 列表:特定中断请求的中断关联性值存储在关联的 /proc/irq/irq_number/smp_affinity 文件中。在此文件中设置 smp_affinity mask: # echo mask > /proc/irq/irq_number/smp_affinity
- 命令/配置摘录:
>>> hex(int('0000000010000001', 2)) '0x81'
# echo mask > /proc/irq/irq_number/smp_affinity- 表格样本(共 2 行):
- CPU | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
- 二进制 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1
第 24 章 使用 tuna 接口检查系统
- 要点:tuna 工具降低了执行调优任务的复杂度。您可以使用 tuna 调整调度程序可调项参数,调优线程优先级、RRI 处理程序并隔离 CPU 核和套接字。通过使用 tuna,您可以执行以下操作:
- 列表:列出系统上的 CPU。
- 列表:列出当前在系统上运行的中断请求(IRQ)。
- 列表:更改有关线程的策略和优先级信息。
- 列表:显示系统的当前策略和优先级。
24.1. 安装 tuna 工具
- 要点:tuna 工具设计为在运行的系统上使用。特定于应用程序的测量工具可在更改后立即分析系统性能。
- 要点:流程
- 列表:安装 tuna 工具: # dnf install tuna
- 列表:显示可用的 tuna CLI 选项: # tuna -h 如需更多信息,请参阅您系统上的 tuna (8) 手册页。
- 命令/配置摘录:
# dnf install tuna
# tuna -h24.2. 使用 tuna 工具查看系统状态
- 要点:您可以使用 tuna 命令行界面(CLI)工具查看系统状态。
- 要点:先决条件
- 列表:tuna 工具已安装。详情请参阅 安装 tuna 工具。
- 列表:查看当前的策略和优先级: # tuna show_threads pid SCHED_ rtpri affinity cmd 1 OTHER 0 0,1 init 2 FIFO 99 0 migration/0 3 OTHER 0 0 ksoftirqd/0 4 FIFO 99 0 watchdog/0
- 列表:或者,查看对应于 PID 或与命令名称匹配的特定线程: # tuna show_threads -t pid_or_cmd_list pid_or_cmd_list 参数是一个用逗号分开的 PID 或 command-name 模式的列表。
- 列表:根据场景,执行以下操作之一: 要使用 tuna CLI 调整 CPU,请使用 tuna 工具完成调整 CPU 中的步骤。 要使用 tuna 工具调整 IRQs,请使用 tuna 工具完成 Tuning IRQs 中的步骤。
- 列表:要使用 tuna CLI 调整 CPU,请使用 tuna 工具完成调整 CPU 中的步骤。
- 列表:要使用 tuna 工具调整 IRQs,请使用 tuna 工具完成 Tuning IRQs 中的步骤。
- 命令/配置摘录:
# tuna show_threads
pid SCHED_ rtpri affinity cmd 1 OTHER 0 0,1 init 2 FIFO 99 0 migration/0 3 OTHER 0 0 ksoftirqd/0 4 FIFO 99 0 watchdog/024.3. 使用 tuna 工具调优 CPU
- 要点:通过更改其可用性和任务关联性,使用 tuna 工具来管理各个 CPU。您可以隔离 CPU,以将其从线程关联性掩码中删除,包括 CPU 供任务使用,或者将 CPU 恢复到之前的配置。
- 要点:先决条件
- 列表:tuna 工具已安装。如需更多信息 ,请参阅安装 tuna 工具。
- 列表:列出当前运行的所有进程: # ps ax | awk 'BEGIN { ORS="," }{ print $1 }' PID,1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,19
- 列表:在 tuna 界面中显示线程列表: # tuna show_threads -t 'thread_list from above cmd'
- 列表:根据您的场景,使用以下命令管理进程的 CPU 亲和性: # tuna [command] --cpus cpu_list cpu_list 参数是一个用逗号分开的 CPU 号的列表,如 --cpus 0,2。 要将特定 CPU 添加到当前的 cpu_list 中,请使用例如 --cpus +0。
- 列表:cpu_list 参数是一个用逗号分开的 CPU 号的列表,如 --cpus 0,2。
- 列表:要将特定 CPU 添加到当前的 cpu_list 中,请使用例如 --cpus +0。
- 命令/配置摘录:
# ps ax | awk 'BEGIN { ORS="," }{ print $1 }'
PID,1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,1924.4. 使用 tuna 工具调优 IRQ
- 要点:/proc/interrupts 文件记录每个 IRQ 的中断计数,包括中断类型和设备名称。
- 要点:先决条件
- 列表:tuna 工具已安装。如需更多信息 ,请参阅安装 tuna 工具。
- 列表:查看当前的 IRQ 及其关联性: # tuna show_irqs # users affinity 0 timer 0 1 i8042 0 7 parport0 0
- 列表:指定要受某一命令影响的 IRQ 的列表: # tuna <command> --irqs irq_list --cpus cpu_list irq_list 参数是用逗号分开的 IRQ 编号或 user-name 模式的列表。 例如,将 <command> 替换为 --spread。
- 列表:irq_list 参数是用逗号分开的 IRQ 编号或 user-name 模式的列表。
- 列表:例如,将 <command> 替换为 --spread。
- 列表:将一个中断移到指定的 CPU 中: # tuna show_irqs --irqs <128> users affinity 128 iwlwifi 0,1,2,3 # tuna move --irqs 128 --cpus 3 使用 irq_list 参数替换 128,使用 cpu_list 参数替换 3 。 cpu_list 参数是一个用逗号分开的 CPU 号的列表,如 --cpus 0,2。如需更多信息,请参阅使用 tuna 工具调整 CPU。
- 命令/配置摘录:
# tuna show_irqs
# users affinity 0 timer 0 1 i8042 0 7 parport0 0第 25 章 配置操作系统以优化内存访问
- 要点:您可以使用 RHEL 中包含的工具配置操作系统,以便在工作负载间优化内存访问。
25.1. 监控和诊断系统内存问题的工具
- 要点:以下工具包括在 Red Hat Enterprise Linux 中用于监控系统性能并诊断与系统内存相关的性能问题:
- 要点:valgrind 框架为用户空间二进制文件提供了工具。这个框架包括几个工具,可用于对程序性能进行性能分析和分析,例如:
- 列表:包含在 procps-ng 软件包中的 vmstat 工具显示系统的进程、内存、分页、块 I/O、陷阱、磁盘和 CPU 活动的报告。它生成一个即时报告,显示上次打开计算机或自上次报告以来这些事件的平均数。
- 列表:valgrind 框架为用户空间二进制文件提供了工具。这个框架包括几个工具,可用于对程序性能进行性能分析和分析,例如: memcheck 工具是 valgrind 中的默认工具。它检测并报告一些可能很难检测和诊断的内存错误,例如: 无效的内存访问 使用未定义或未初始化的值 空闲的堆内存不正确 指针重叠(缓冲区重叠) 内存泄漏 注意 Memcheck 只报告这些错误,它无法防止它们发生。但是,memcheck 会在错误发生前立即记录错误消息。 cachegrind 工具模拟应用程序如何与系统的缓存层次结构和分支预测进行交互。它收集应用程序执行期间的统计信息,并在控制台上显示摘要。 massif 工具测量指定的应用程序使用的堆空间。它…
- 列表:memcheck 工具是 valgrind 中的默认工具。它检测并报告一些可能很难检测和诊断的内存错误,例如: 无效的内存访问 使用未定义或未初始化的值 空闲的堆内存不正确 指针重叠(缓冲区重叠) 内存泄漏 注意 Memcheck 只报告这些错误,它无法防止它们发生。但是,memcheck 会在错误发生前立即记录错误消息。
- 列表:无效的内存访问
- 列表:使用未定义或未初始化的值
- 列表:空闲的堆内存不正确
- 注意:注意 Memcheck 只报告这些错误,它无法防止它们发生。但是,memcheck 会在错误发生前立即记录错误消息。
25.2. 系统内存的概述
- 要点:Linux 内核旨在最大化系统内存(RAM)中资源的利用率。由于这些设计特性,内核操作会对工作负载使用大多数系统内存,同时将小部分保持可用。
- 要点:这个空闲内存为以下情况保留:特殊的系统分配和其他低或高优先级系统服务。系统内存的其余部分专用于工作负载本身,并分为以下两类:
25.3. 虚拟内存参数
- 要点:虚拟内存参数列在 /proc/sys/vm 目录中。
- 要点:以下是可用的虚拟内存参数:
- 列表:当设置为 1 时,内核不会执行内存过量使用处理。这会增加内存过载的可能性,但提高了内存密集型任务的性能。
- 列表:当设置为 2 时,内核拒绝分配超过总交换,加上 overcommit_ratio 中定义的 RAM 百分比。此设置降低了过量使用内存的风险。这只适用于大于物理内存的交换分区的系统。
- 列表:增加参数值可有效减少应用程序工作集可用内存。因此,您只能将其用于内核驱动的工作负载,其中驱动程序缓冲区需要在原子上下文中分配。
- 列表:如果内存在系统中被大量处理,则减少参数值可能会导致内核无法服务系统请求。 警告 极端的值可能会降低系统性能。将 vm.min_free_kbytes 设置为非常低的值可防止系统有效地回收内存。这可能导致系统崩溃并导致服务中断或其他内核服务失败。但是,设置 vm.min_free_kbytes 太大地增加系统回收活动,从而导致分配延迟因为假的直接重新声明状态而造成分配延迟。这可能导致系统立即进入内存不足状态。vm.min_free_kbytes 参数还设置页面重新声明水位线,名为 min_pages。在确定两个其他内存水位线、low_pages 和 high_pages 时,这个水位线被用作一个因素,它管理页面重新声明算法。
- 列表:/proc/PID/oom_adj ,在事件中,当系统内存不足,并且 panic_on_oom 参数设置为 0 时,oom_killer 函数会终止进程,从具有最高 oom_score 的进程开始,直到系统恢复为止。oom_adj 参数决定了进程的 oom_score。这个参数会根据进程标识符设置。值 -17 可禁用该进程的 oom_killer。其他有效的值范围从 -16 到 15。 注意 由调整的进程创建的进程将继承该进程的 oom_score。
- 列表:高的值首选文件映射驱动的工作负载,同时交换出较少访问的进程的匿名映射的 RAM 内存。文件服务器和流应用程序使用它来在内存中保留数据,从而减少 I/O 延迟。
- 注意:警告 极端的值可能会降低系统性能。将 vm.min_free_kbytes 设置为非常低的值可防止系统有效地回收内存。这可能导致系统崩溃并导致服务中断或其他内核服务失败。但是,设置 vm.min_free_kbytes 太大地增加系统回收活动,从而导致分配延迟因为假的直接重新声明状态而造成分配延迟。这可能导致系统立即进入内存不足状态。vm.min_free_kbytes 参数还设置页面重新声明水位线,名为 min_pages。在确定两个其他内存水位线、low_pages 和 high_pages 时,这个水位线被用作一个因素,它管理页面重新声明算法。
- 注意:注意 由调整的进程创建的进程将继承该进程的 oom_score。
25.4. 文件系统参数
- 要点:文件系统参数在 /proc/sys/fs 目录中列出。以下是可用的文件系统参数:
- 要点:决定整个系统的最大文件句柄数。在 Red Hat Enterprise Linux 10 中,默认值为 9223372036854775807。
- 注意:注意 默认值由 systemd 设置,对应于可配置的最大值。
25.5. 内核参数
- 要点:内核参数的默认值位于 /proc/sys/kernel/ 目录中。它们被设置为内核提供的默认值,或用户使用 sysctl 指定的值。以下内核参数为 msg* 和 shm* System V IPC (sysvipc)系统调用配置限制:
25.6. 设置与内存相关的内核参数
- 要点:临时设置参数有助于确定参数在系统上具有的影响。当您确保参数值具有预期的效果时,您可以永久设置该参数。
- 要点:流程
- 列表:要临时设置与内存相关的内核参数,请编辑 /proc 文件系统或 sysctl 工具中的相应文件。例如,要临时将 vm.overcommit_memory 参数设置为 1: # echo 1 > /proc/sys/vm/overcommit_memory # sysctl -w vm.overcommit_memory=1
- 列表:要永久设置与内存相关的内核参数,请编辑 /etc/sysctl.conf 文件并重新载入设置。例如,要永久将 vm.overcommit_memory 参数设置为 1: 在 /etc/sysctl.conf 文件中添加以下内容: vm.overcommit_memory=1 重新载入 /etc/sysctl.conf 文件中的 sysctl 设置: # sysctl -p
- 列表:在 /etc/sysctl.conf 文件中添加以下内容: vm.overcommit_memory=1
- 列表:重新载入 /etc/sysctl.conf 文件中的 sysctl 设置: # sysctl -p
- 列表:为 IBM DB 调优 Red Hat Enterprise Linux (红帽知识库)
- 命令/配置摘录:
# echo 1 > /proc/sys/vm/overcommit_memory
# sysctl -w vm.overcommit_memory=1第 26 章 SystemTap 入门
- 要点:作为系统管理员,使用 SystemTap 来识别正在运行的 Red Hat Enterprise Linux (RHEL)系统上存在错误或性能问题的根本原因。作为应用程序开发人员,您可以使用 SystemTap 密切监控和分析 RHEL 环境中应用程序的行为。
26.1. SystemTap 的目的
- 要点:SystemTap 通过追踪和探测详细监控操作系统和内核活动。SystemTap 提供与 netstat、ps、top 和 iostat 等工具输出相似的信息。但是,SystemTap 提供了更多用于收集的信息的过滤和分析选项。
- 要点:在 SystemTap 脚本中,指定 SystemTap 收集的信息。
26.2. 安装 SystemTap
- 要点:要开始使用 SystemTap,请安装所需的软件包。要将 SystemTap 与多个内核搭配使用,请为每个版本安装匹配的内核软件包。
- 要点:先决条件
- 列表:您已启用了 debug 软件仓库,如 启用调试和源存储库 中所述。
- 列表:安装所需的 SystemTap 软件包: # dnf install systemtap
- 列表:安装所需的内核软件包: 使用 stap-prep : # stap-prep 如果 stap-prep 无法正常工作,请手动安装所需的内核软件包: # dnf install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r) kernel-devel-$(uname -r) $(uname -m) 被自动替换为您系统的硬件平台,$uname -r) 被自动替换为正在运行的内核的版本。
- 列表:使用 stap-prep : # stap-prep
- 列表:如果 stap-prep 无法正常工作,请手动安装所需的内核软件包: # dnf install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r) kernel-devel-$(uname -r) $(uname -m) 被自动替换为您系统的硬件平台,$uname -r) 被自动替换为正在运行的内核的版本。
- 列表:如果当前使用 SystemTap 探测内核,请检查您的安装是否成功: # stap -v -e 'probe kernel.function("vfs_read") {printf("read performed\n"); exit()}' 对于成功的 SystemTap 部署,您会看到类似如下的输出: Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/2…
- 命令/配置摘录:
# dnf install systemtap
# stap-prep26.3. 运行 SystemTap 的权限
- 要点:运行 SystemTap 脚本需要升级的系统特权,但在某些实例中,非特权用户可能需要在他们的机器上运行 SystemTap 检测。
- 要点:要允许用户在没有 root 访问权限的情况下构建并运行 SystemTap 脚本,将用户添加到这些用户组中:
26.4. 运行 SystemTap 脚本
- 要点:您可以从标准输入或从文件运行 SystemTap 脚本。在 Sample SystemTap 脚本或 /usr/share/systemtap/examples 目录中查找与 SystemTap 安装一起分发的示例脚本。
- 要点:先决条件
- 列表:安装 SystemTap 和所需的内核软件包,如 安装 Systemtap 所述。
- 列表:要以普通用户身份运行 SystemTap 脚本,请将该用户添加到 SystemTap 组: # usermod --append --groups stapdev,stapusr <user_name>
- 列表:运行 SystemTap 脚本: 从标准输入中: # stap -e "probe timer.s(1) {exit()}" 从文件中: # stap <file_name>.stp
- 列表:从标准输入中: # stap -e "probe timer.s(1) {exit()}"
- 列表:从文件中: # stap <file_name>.stp
- 命令/配置摘录:
# usermod --append --groups stapdev,stapusr <user_name>
# stap -e "probe timer.s(1) {exit()}"26.5. SystemTap 脚本示例
- 要点:您可以在 /usr/share/systemtap/examples 目录中找到与 SystemTap 安装一起分发的脚本示例。
- 要点:使用 stap 命令运行不同的 SystemTap 脚本:
- 列表:您正在追踪的 entry/exit 函数的名称。
- 列表:可选的触发器功能,用于在每个线程上启用或禁用追踪。 只要触发器功能没有退出,每个线程中的追踪将继续。
- 命令/配置摘录:
# stap para-callgraph.stp <argument1 argument2>
# stap timeout.stp- 注意:注意 您可以在 /usr/share/systemtap/examples/index.html 文件中找到有关 SystemTap 脚本的更多示例和信息。在 Web 浏览器中打开它,以查看所有可用的脚本及其描述的列表。
26.6. SystemTap 交叉检测
- 要点:交叉检测在一个主机上构建 SystemTap 模块,以便在其他主机上使用,而无需完整的软件套件。运行 SystemTap 脚本时,将从该脚本构建内核模块。然后,SystemTap 会将模块加载到内核中。
- 要点:通常,SystemTap 脚本只能在部署了 SystemTap 的系统中运行。要在 10 个系统上运行 SystemTap,需要将 SystemTap 部署到所有这些系统上。在某些情况下,这可能并不可行。例如,企业策略可能会禁止编译器或调试数据,防止在所有目标系统上部署标准 SystemTap。
- 列表:可以在单一主机上安装各种机器的内核信息软件包。内核打包错误可能会阻止安装。在这种情况下,主机系统和目标系统的 kernel-debuginfo 和 kernel-devel 软件包必须匹配。如果发生错误,请向红帽 JIRA 报告错误。
- 列表:每个目标机器只需要安装一个软件包就可以使用生成的 SystemTap 检测模块:systemtap-runtime。检测模块需要主机和目标系统共享相同的架构和发行版。 术语
- 列表:检测模块 在主机上构建 SystemTap 模块,然后将它加载到目标系统的内核。
- 列表:主机系统 其上编译了检测模块(来自 SystemTap 脚本)的系统,将在目标系统上加载。
- 列表:目标系统 正在构建检测模块的系统(来自 SystemTap 脚本)。
- 列表:目标内核 目标系统的内核。这是加载并运行检测模块的内核。
26.7. 初始化 SystemTap 的交叉检测
- 要点:初始化 SystemTap 交叉检测,以在一个系统上构建模块,并将它们部署到缺少完整套件的系统上。
- 要点:先决条件
- 列表:SystemTap 安装在主机系统上,如 安装 Systemtap 所述。
- 列表:systemtap-runtime 软件包已安装在每个目标系统上: # dnf install systemtap-runtime
- 列表:主机和目标系统是相同的架构。
- 列表:主机和目标系统都运行相同的 Red Hat Enterprise Linux 主版本(如 Red Hat Enterprise Linux 10)。 重要 内核打包 bug 可能会阻止在一个系统上安装多个 kernel-debuginfo 和 kernel-devel 软件包。在这种情况下,主机和目标系统的次版本必须匹配。如果有 bug 发生,请在 Red Hat JIRA 中报告。
- 列表:确定在每个目标系统上运行的内核: $ uname -r
- 列表:对每个 目标 系统重复此步骤。
- 命令/配置摘录:
# dnf install systemtap-runtime
$ uname -r- 注意:重要 内核打包 bug 可能会阻止在一个系统上安装多个 kernel-debuginfo 和 kernel-devel 软件包。在这种情况下,主机和目标系统的次版本必须匹配。如果有 bug 发生,请在 Red Hat JIRA 中报告。
第 27 章 调优调度策略
- 要点:在 Red Hat Enterprise Linux (RHEL)中,线程是进程执行的最小单元。系统调度程序选择哪个处理器运行线程,以及确定整个系统利用率的时长。因此,线程调度可能不会为特定应用程序性能策略进行了优化。
- 要点:例如,如果 NUMA 系统上的应用程序在 Node B 上的处理器可用时在 Node A 上运行。为了将处理器保持在节点 B 忙碌上,调度程序会将其中一个应用的线程移到节点 B。但是,应用程序线程仍需要访问 Node A 上的内存。访问此内存需要更长的时间。线程现在在节点 B 上运行,使节点 A 内存远程而不是本地的。在 Node B 上运行的时间可能比等待节点 A 的时间要长。本地内存访问通常超过迁移的好处。
27.1. 调度策略的类别
- 要点:当设计人员或管理员控制运行线程的位置时,对性能敏感的应用程序通常会受益。Linux 调度程序实施多个调度策略,以确定线程的运行位置和时长。
- 要点:以下是两个主要的调度策略类别:
- 列表:使用 SCHED_FIFO 的静态优先级调度
- 列表:使用 SCHED_RR 循环优先级调度
27.2. 使用 SCHED_FIFO 的静态优先级调度
- 要点:SCHED_FIFO 也称为静态优先级调度,是一个实时策略,其为每个线程定义一个固定的优先级。此策略使管理员能够改进事件响应时间并缩短延迟。避免将此策略用于时间敏感的任务。
- 要点:调度程序从就绪线程列表中运行最高优先级 SCHED_FIFO 线程。SCHED_FIFO 优先级级别范围从整数 1 到 99,其中 99 为最高。从较低数字开始,只有在您识别延迟问题时才增加优先级。
- 注意:警告 因为实时线程不受时间片限制,因此请避免设置优先级 99。这会使您的进程与迁移和 watchdog 线程相同的优先级级别。如果您的线程进入计算循环,并且这些线程被阻止,则它们无法运行。具有单一处理器的系统最终会在这种情况下挂起。
27.3. 使用 SCHED_RR 循环优先级调度
- 要点:SCHED_RR 是 SCHED_FIFO 的循环变体。当多个线程需要在同一优先级级别上运行时,此策略很有用。与 SCHED_FIFO 一样,SCHED_RR 是一个实时策略,用于为每个线程定义固定优先级。
- 要点:调度程序会按照优先级顺序扫描所有 SCHED_RR 线程的列表。然后,它会调度可随时运行的最高优先级线程。但是,与 SCHED_FIFO 不同,在特定时间片段中以 round-robin 样式调度具有相同优先级的线程。您可以使用 /proc/sys/kernel/sched_rr_timeslice_ms 文件中的 sched_rr_timeslice_ms 内核参数以毫秒为单位设置这个时间片段的值。最低值为 1 毫秒。
27.4. 使用 SCHED_OTHER 常规调度
- 要点:要启用对使用此策略调度的所有线程的公平处理器访问,S CSC_OTHER 使用完全公平调度程序(CFS)。SCHED_OTHER 是默认的调度策略。
- 要点:当有大量线程或数据吞吐量是优先级时,SCHED_OTHER 非常有用。它随着时间的推移可以更有效地调度线程。调度程序会根据每个线程的 niceness 值创建一个动态优先级列表。管理员可以更改进程的 niceness 值,但不能直接更改调度程序的动态优先级列表。
27.5. 设置调度程序策略
- 要点:您可以使用 chrt 命令行工具检查和调整调度程序策略和优先级。它可以启动具有预期属性的新进程,或更改正在运行的进程的属性。它还可用于在运行时设置策略。
- 要点:流程
- 列表:查看活跃进程的进程 ID (PID) : # ps
- 列表:在 ps 命令中使用 --pid 或 -p 选项来查看特定 PID 的详细信息。
- 列表:检查特定进程的调度策略、PID 和优先级: # chrt -p 468 pid 468's current scheduling policy: SCHED_FIFO pid 468's current scheduling priority: 85 # chrt -p 476 pid 476's current scheduling policy: SCHED_OTHER pid 476's current scheduling priority: 0
- 列表:设置进程的调度策略,例如: 要将 PID 为 1000 的进程设置为 SCHED_FIFO,其优先级为 50 : # chrt -f -p 50 1000 要将 PID 为 1000 的进程设置为 SCHED_OTHER,其优先级为 0 : # chrt -o -p 0 1000 要将 PID 为 1000 的进程设置为 SCHED_RR,其优先级为 10 : # chrt -r -p 10 1000 要启动具有特定策略和优先级的新应用,请指定应用程序的名称: # chrt -f 36 /bin/my-app
- 列表:要将 PID 为 1000 的进程设置为 SCHED_FIFO,其优先级为 50 : # chrt -f -p 50 1000
- 列表:要将 PID 为 1000 的进程设置为 SCHED_OTHER,其优先级为 0 : # chrt -o -p 0 1000
- 命令/配置摘录:
# ps
# chrt -p 46827.6. chrt 命令的策略选项
- 要点:您可以使用 chrt 命令查看和设置进程的调度策略。下表描述了适当的策略选项,可用于设置进程的调度策略。
- 表格样本(共 4 行):
- 短选项 | 长选项 | 描述
- -f | --fifo | 将调度设置为 SCHED_FIFO
- -o | --other | 将调度设置为 SCHED_OTHER
- -r | --rr | 将调度设置为 SCHED_RR
27.7. 在引导过程中更改服务优先级
- 要点:您可以使用 systemd 服务为在启动过程中启动的服务配置实时优先级。单元配置指令在启动过程中更改服务优先级。
- 要点:您可以使用 service 部分中的不同指令来更改引导过程优先级。
- 列表:CPUSchedulingPolicy= :设置正在运行的进程的 CPU 调度策略。它用于设置 other、fifo 和 rr 策略。
- 列表:CPUSchedulingPriority= :设置正在运行的进程的 CPU 调度优先级。可用的优先级范围取决于所选的 CPU 调度策略。对于实时调度策略,可以使用 1(最低优先级)和 99(最高优先级)之间的整数。
- 列表:您已安装并启用了 tuned。如需更多信息,请参阅 安装和启用 TuneD。
- 列表:查看正在运行的线程的调度优先级: # tuna --show_threads thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 1 OTHER 0 0xff 3181 292 systemd 2 OTHER 0 0xff 254 0 kthreadd 3 OTHER 0 0xff 2 0 rcu_gp 4 OTHER 0 0xff 2 0 rcu_par_gp 6 OTHER 0 0 9 0 kworker/0:0H-kblockd 7 OTHER 0 0xff 1301 1 kworker/u16:0-events_…
- 列表:创建附加 mcelog 服务配置文件,并在该文件中插入策略名称和优先级: # cat << EOF > /etc/systemd/system/mcelog.service.d/priority.conf [Service] CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 EOF
- 列表:重新载入 systemd 脚本配置: # systemctl daemon-reload
- 命令/配置摘录:
# tuna --show_threads
thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 1 OTHER 0 0xff 3181 292 systemd 2 OTHER 0 0xff 254 0 kthreadd 3 OTHER 0 0xff 2 0 rcu_gp 4 OTHER 0 0xff 2 0 rcu_par_gp 6 OTHER 0 0 9 0 kworker/0:0H-kblockd 7 OTHER 0 0xff 1301 1 kworker/u16:0-events_unbound 8 OTHER 0 0xff 2 0 mm_percpu_wq 9 OTHER 0 0 266 0 ksoftirqd/0 [...]27.8. 优先级映射
- 要点:优先级在组中定义,有一些组专用于特定内核功能。对于实时调度策略,使用 1(最低优先级)和 99(最高优先级)之间的整数。
- 要点:下表描述了优先级范围,可在设置进程的调度策略时使用。
- 表格样本(共 6 行):
- Priority | 线程 | 描述
- 1 | 低优先级内核线程 | 此优先级通常为需要仅在 SCHED_OTHER 之前的任务保留。
- 2 - 49 | 可供使用 | 用于典型的应用程序优先级的范围。
- 50 | 默认 hard-IRQ 值
27.9. TuneD cpu-partitioning 配置文件
- 要点:要为对延迟敏感的工作负载调整 Red Hat Enterprise Linux,请使用 cpu-partitioning TuneD 配置集。在 RHEL 9 及更新的版本中,您可以使用 cpu-partitioning TuneD 配置集更有效地执行低延迟性能优化。
- 要点:根据个人低延迟应用程序的要求,此配置文件可轻松自定义。下图是一个显示如何使用 cpu-partitioning 配置文件的示例。这个示例使用 CPU 和节点布局。
27.10. 使用 TuneD cpu-partitioning 配置文件进行低延迟调整
- 要点:您可以使用 TuneD 的 cpu-partitioning 配置文件调优系统,以实现低延迟。
- 要点:使用这个配置集配置的应用程序使用:
- 列表:从网络读取数据的专用的 reader 线程将固定到 CPU 2。
- 列表:处理此网络数据的大量线程将固定到 CPU 4-23。
- 列表:将处理的数据写入网络的专用写入器线程固定到 CPU 3。
- 列表:您已以 root 用户身份,使用 dnf install tuned-profiles-cpu-partitioning 命令安装 cpu-partitioning TuneD 配置文件。
- 列表:使用以下更改编辑 /etc/tuned/cpu-partitioning-variables.conf 文件: 注释掉 isolated_cores=${f:calc_isolated_cores:1} 行: # isolated_cores=${f:calc_isolated_cores:1} 为隔离的 CPUS 添加以下信息: # All isolated CPUs: isolated_cores=2-23 # Isolated CPUs without the kernel’s scheduler load balancing: no_balance_cores=2,3 设置 cpu-partitioning TuneD 配…
- 列表:注释掉 isolated_cores=${f:calc_isolated_cores:1} 行: # isolated_cores=${f:calc_isolated_cores:1}
- 命令/配置摘录:
# isolated_cores=${f:calc_isolated_cores:1}
# All isolated CPUs: isolated_cores=2-23 # Isolated CPUs without the kernel’s scheduler load balancing: no_balance_cores=2,3- 注意:注意 TuneD 无法更改某些进程的亲和性,主要是内核进程。在本例中,PID 4 和 9 的进程保持不变。
27.11. 自定义 cpu-partitioning TuneD 配置文件
- 要点:您可以扩展 TuneD 配置文件,以进行额外的性能优化更改。例如,cpu-partitioning 配置文件将 CPU 设置为使用 cstate=1。要使用 cpu-partitioning 配置集,但要额外将 CPU cstate 从 cstate1 改为 cstate0,请按照以下步骤执行。
- 要点:流程
- 列表:创建 /etc/tuned/profiles/my_profile 目录: # mkdir /etc/tuned/profiles/my_profile
- 列表:在此目录中创建 tuned.conf 文件并添加以下内容: # vi /etc/tuned/profiles/my_profile/tuned.conf [main] summary=Customized tuning on top of cpu-partitioning include=cpu-partitioning [cpu] force_latency=cstate.id:0|1
- 列表:使用新的配置文件。 # tuned-adm profile my_profile 注意 在共享示例中,不需要重新启动。但是,如果 my_profile 配置文件中的更改需要重新引导才能生效,则重新启动计算机。
- 命令/配置摘录:
# mkdir /etc/tuned/profiles/my_profile
# vi /etc/tuned/profiles/my_profile/tuned.conf- 注意:注意 在共享示例中,不需要重新启动。但是,如果 my_profile 配置文件中的更改需要重新引导才能生效,则重新启动计算机。
第 28 章 使用 numastat 分析内存分配
- 要点:numastat 工具提供有关系统中内存分配的详细统计信息,分别显示每个 NUMA 节点的数据。此信息对于分析系统内存性能并评估各种内存策略的效率很有价值。
28.1. 默认 numastat 统计
- 要点:默认情况下,numastat 工具显示各个 NUMA 节点的这些类别数据的统计信息:
- 要点:由于预期节点上的内存较低,在此节点上分配的页面数量。每个 numa_miss 事件在另一个节点上都有对应的 numa_foreign 事件。
- 注意:注意 高 numa_hit 值和低 numa_miss 值(相对于彼此)代表优化的性能。
28.2. 使用 numastat 查看内存分配
- 要点:您可以使用 numastat 工具查看系统的内存分配。
- 要点:先决条件
- 列表:您已安装了 numactl 软件包。 # dnf install numactl
- 列表:查看系统的内存分配: $ numastat node0 node1 numa_hit 76557759 92126519 numa_miss 30772308 30827638 numa_foreign 30827638 30772308 interleave_hit 106507 103832 local_node 76502227 92086995 other_node 30827840 30867162
- 命令/配置摘录:
# dnf install numactl
$ numastat完整目录
- 优化系统吞吐量、延迟和电源消耗
- 对红帽文档提供反馈
- 第 1 章 性能监控选项概述
- 第 2 章 使用 TuneD 优化系统性能
- 2.1. RHEL 提供的调优配置文件
- 2.2. RHEL 提供的实时 TuneD 配置文件
- 2.3. 安装并启用 TuneD
- 2.4. 管理 TuneD 配置文件
- 2.5. 配置文件继承和用于配置文件自定义的变量
- 2.6. 用于配置文件自定义的内置函数
- 2.7. TuneD 插件
- 2.8. 创建一个新的 TuneD 配置文件
- 2.9. 修改现有 TuneD 配置文件
- 2.10. 启用 TuneD no-daemon 模式
- 2.11. 其他资源
- 第 3 章 设置磁盘调度程序
- 3.1. 可用磁盘调度程序
- 3.2. 不同用例的磁盘调度程序
- 3.3. 确定活跃磁盘调度程序
- 3.4. 使用 TuneD 设置磁盘调度程序
- 3.5. 使用 udev 规则设置磁盘调度程序
- 3.6. 为特定磁盘临时设置调度程序
- 第 4 章 配置 Performance Co-Pilot
- 4.1. 安装并启用 PCP
- 4.2. PCP 归档轮转、压缩和比较
- 4.3. 部署最少的配置以归档收集的指标
- 4.4. 系统服务和使用 PCP 分发的工具
- 4.5. PCP 部署架构
- 4.6. 影响 PCP 日志记录扩展的因素
- 4.7. 其他资源
- 第 5 章 配置 pmda-openmetrics
- 5.1. pmda-openmetrics 概述
- 5.2. 安装和配置 pmda-openmetrics
- 第 6 章 使用 pmlogger 记录性能数据
- 6.1. 使用 pmlogconf 修改 pmlogger 配置文件
- 6.2. 手动配置 pmlogger
- 6.3. 启用 pmlogger 服务
- 6.4. 为指标集合配置客户端系统
- 6.5. 配置中央服务器以收集数据
- 6.6. systemd 单元和 pmlogger
- 6.7. 管理被 pmlogger 触发的 systemd 服务
- 6.8. 使用 pmrep 重现 PCP 日志存档
- 第 7 章 使用 Performance Co-Pilot 监控性能
- 7.1. 使用 pmda-postfix 监控 postfix
- 7.2. 使用 PCP Charts 应用程序可视化追踪 PCP 日志存档
- 7.3. 使用 PCP 从 SQL 服务器收集数据
- 第 8 章 配置 PCP 指标的图形表示
- 8.1. 使用 pcp-zeroconf 配置 PCP
- 8.2. 配置 grafana-server
- 8.3. 配置 valkey
- 8.4. 访问 Grafana Web UI
- 8.5. 为 Valkey 和 PCP 配置安全连接
- 8.6. 在 PCP Valkey 数据源中创建面板和警报
- 8.7. 为警报添加通知频道
- 8.8. 在 PCP 组件间配置身份验证
- 8.9. 安装 PCP bpftrace
- 8.10. 查看 PCP bpftrace System Analysis 仪表盘
- 8.11. 安装 PCP 向量
- 8.12. 查看 PCP Vector 清单
- 8.13. 在 Grafana 中使用 heatmaps
- 8.14. 为 Grafana geomaps 配置 pcp-geolocate
- 8.15. 在 Grafana 中使用 geomaps 视觉化 PCP 数据
- 8.16. 管理 Grafana 的 SELinux 布尔值
- 8.17. Grafana 问题故障排除
- 第 9 章 使用 PowerTOP 管理能耗
- 9.1. 电源管理基础
- 9.2. 审计和分析概述
- 9.3. 用于审计的工具
- 9.4. PowerTOP 的目的
- 9.5. 安装 PowerTOP
- 9.6. 启动 PowerTOP
- 9.7. 校准 PowerTOP
- 9.8. 设置测量间隔
- 9.9. 控制 CPU 频率驱动程序和模式
- 9.10. 生成 HTML 输出
- 9.11. 优化功耗
- 9.11.1. 使用 powertop 服务优化功耗
- 9.11.2. powertop2tuned 工具
- 9.11.3. 使用 powertop2tuned 程序优化电源消耗
- 9.11.4. 比较 powertop2tuned 和 powertop.service 的用法
- 第 10 章 perf 入门
- 10.1. 安装 perf
- 10.2. 常见 perf 命令
- 第 11 章 使用 perf top 实时分析 CPU 使用情况
- 11.1. perf top 的目的
- 11.2. 使用 perf top 分析 CPU 使用量
- 11.3. perf 输出和符号解析
- 11.4. 启用调试和资源存储库
- 11.5. 使用 GDB 获取应用程序或库的 debuginfo 软件包
- 第 12 章 使用 perf stat 在进程执行过程中计算事件
- 12.1. perf stat 的目的
- 12.2. 使用 perf stat 计数事件
- 12.3. perf stat 输出的解释
- 12.4. 将 perf stat 附加到正在运行的进程
- 第 13 章 使用 perf 记录和分析性能配置文件
- 13.1. perf record 的目的
- 13.2. 记录性能配置文件
- 13.3. 以针对每个 CPU 的模式记录性能档案
- 13.4. 使用 perf record 捕获调用图形数据
- 13.5. 使用 perf report 分析 perf.data
- 13.6. 将 perf 记录附加到正在运行的进程
- 13.7. perf 报告输出的解释
- 13.8. 生成一个在不同设备上可读的 perf.data 文件
- 13.9. 从不同的设备分析 perf.data 文件
- 第 14 章 使用 perf 调查繁忙的 CPU
- 14.1. 显示使用 perf stat 记录的 CPU 事件
- 14.2. 显示使用 perf report 采集的 CPU 样本
- 14.3. 使用 perf top 在性能分析期间显示特定 CPU
- 14.4. 使用 perf record 和 perf report 监控特定的 CPU
- 第 15 章 使用 perf 创建 uprobes
- 15.1. 在功能级别使用 perf 创建 uprobes
- 15.2. 在带有 perf 的函数内创建 uprobes
- 15.3. 通过 uprobes 记录的数据 perf 脚本输出
- 第 16 章 使用 perf mem 分析内存访问
- 16.1. 使用 perf mem 抽样内存访问
- 16.2. perf mem 报告输出的解释
- 第 17 章 检测错误共享
- 17.1. perf c2c 的目的
- 17.2. 使用 perf c2c 检测缓存行竞争
- 17.3. 视觉化使用 perf c2c 记录所记录的 perf.data 文件
- 17.4. perf c2c 报告输出的解释
- 17.5. 使用 perf c2c 检测错误共享
- 第 18 章 flamegraphs 入门
- 18.1. 安装 flamegraphs
- 18.2. 在整个系统中创建 flamegraphs
- 18.3. 在特定进程中创建 flamegraphs
- 18.4. 在 flamegraphs 中分析堆栈追踪和功能热点
- 第 19 章 使用 perf 循环缓冲监控性能瓶颈的进程
- 19.1. 循环缓冲区和使用 perf 的特定于事件的快照
- 19.2. 通过 perf 循环缓冲区收集特定数据,来监控性能瓶颈
- 第 20 章 使用 perf 收集器管理追踪点,而无需重启 perf
- 20.1. 在没有停止或重启 perf 的情况下向正在运行的 perf 添加追踪点
- 20.2. 在不停止或重启 perf 的情况下从正在运行的 perf 收集器中除追踪点
- 第 21 章 在 web 控制台中优化系统性能
- 21.1. Web 控制台中的性能调优选项
- 21.2. 在 Web 控制台中设置性能配置文件
- 21.3. 使用 Web 控制台监控本地系统的性能
- 21.4. 使用 Web 控制台和 Grafana 监控多个系统的性能
- 第 22 章 使用 BPF Compiler Collection 分析系统性能
- 22.1. 安装 bcc-tools 软件包
- 22.2. 使用 execsnoop 检查系统进程
- 22.3. 跟踪 opensnoop 命令打开的文件
- 22.4. 使用 biotop 监控磁盘上执行 I/O 操作的靠前的进程
- 22.5. 使用 xfsslower 公开异常慢的文件系统操作
- 第 23 章 配置操作系统以优化 CPU 使用率
- 23.1. 监控和诊断处理器问题的工具
- 23.2. 系统拓扑类型
- 23.3. 显示系统拓扑
- 23.4. 配置内核空循环时间
- 23.5. 中断请求概述
- 23.6. 手动平衡中断
- 23.7. 设置 smp_affinity 掩码
- 第 24 章 使用 tuna 接口检查系统
- 24.1. 安装 tuna 工具
- 24.2. 使用 tuna 工具查看系统状态
- 24.3. 使用 tuna 工具调优 CPU
- 24.4. 使用 tuna 工具调优 IRQ
- 第 25 章 配置操作系统以优化内存访问
- 25.1. 监控和诊断系统内存问题的工具
- 25.2. 系统内存的概述
- 25.3. 虚拟内存参数
- 25.4. 文件系统参数
- 25.5. 内核参数
- 25.6. 设置与内存相关的内核参数
- 第 26 章 SystemTap 入门
- 26.1. SystemTap 的目的
- 26.2. 安装 SystemTap
- 26.3. 运行 SystemTap 的权限
- 26.4. 运行 SystemTap 脚本
- 26.5. SystemTap 脚本示例
- 26.6. SystemTap 交叉检测
- 26.7. 初始化 SystemTap 的交叉检测
- 第 27 章 调优调度策略
- 27.1. 调度策略的类别
- 27.2. 使用 SCHED_FIFO 的静态优先级调度
- 27.3. 使用 SCHED_RR 循环优先级调度
- 27.4. 使用 SCHED_OTHER 常规调度
- 27.5. 设置调度程序策略
- 27.6. chrt 命令的策略选项
- 27.7. 在引导过程中更改服务优先级
- 27.8. 优先级映射
- 27.9. TuneD cpu-partitioning 配置文件
- 27.10. 使用 TuneD cpu-partitioning 配置文件进行低延迟调整
- 27.11. 自定义 cpu-partitioning TuneD 配置文件
- 第 28 章 使用 numastat 分析内存分配
- 28.1. 默认 numastat 统计
- 28.2. 使用 numastat 查看内存分配
