欢迎光临
我们一直在努力

《性能之巅》第四章 “观测工具” 读书笔记

本章是全书从理论转向实践的关键枢纽,系统性地梳理了Linux系统性能观测的“工具箱”全景图。作者Brendan Gregg强调,避免“街灯讹方法”(即只使用自己熟悉的工具,如top,而忽视其他更合适的工具)是进行有效性能分析的前提。本章不仅列举了工具,更构建了一个基于观测对象与方法的分类框架,并深入揭示了数据来源(如/proc、/sys),为后续针对CPU、内存、文件系统等具体组件的深入分析奠定了方法论基础。

一、观测工具的分类框架

作者根据观测对象(系统级 vs. 进程级)和观测方法(计数器 vs. 事件)两个维度,将性能工具划分为四个象限,这有助于我们根据问题场景选择正确的工。

1. 固定计数器(Fixed Counters)

这类工具读取由内核维护的各种统计计数器(如CPU周期、磁盘I/O次数、网络包数量),提供系统或进程在某个时间点的资源使用快照。

  • 系统级别:vmstat(虚拟内存统计)、mpstat(每CPU统计)、iostat(磁盘I/O统计)、nstat(网络栈统计)、sar(系统活动报告器)。这些是性能排查的“第一响应”工具,用于快速了解系统整体负载和瓶颈方向。例如,top命令不仅显示进程列表,其顶部的汇总行还隐含了关键信息:最近1、5、15分钟的负载平均值,以及CPU时间在用户态、内核态、I/O等待(iowait)等状态间的分布,能初步判断瓶颈所在。
  • 进程级别:ps(进程状态)、top(动态进程视图)、pmap(进程内存映射)。它们用于识别消耗资源最多的具体进程及其ID、命令行等信息。

2. 剖析(Profiling)

剖析旨在揭示在某一时刻或短时间段内,某项资源(如CPU)的使用构成。它回答“CPU时间具体花在了哪些函数或代码路径上?”的问题。

  • 常用工具:perf是Linux标准的性能剖析工具。此外,还有针对特定场景的工具,如BCC中的profile(基于BPF的CPU剖析器)、Intel VTune Amplifier XE(带图形界面的剖析器),以及针对特定语言的剖析器,如Java Flight Recorder (JFR)。

3. 跟踪(Tracing)

跟踪记录一段时间内发生的具体事件,提供详细的、带有时间戳的流水账,用于深入分析特定操作的完整链条。

  • 系统级别:
    • tcpdump:经典的网络数据包捕获工具。
    • biosnoop、execsnoop:分别用于跟踪块I/O事件和新进程创建事件,基于BCC或bpftrace。
    • Ftrace:Linux内核内置的跟踪框架。
    • BCC & bpftrace:本书作者大力推荐的基于eBPF的现代跟踪工具集,功能强大且灵活。
    • perf trace:perf工具的子命令,用于全系统范围的系统调用跟踪。
  • 进程级别:
    • strace:跟踪进程发起的系统调用,是排查进程行为(如文件、网络访问)的利器。
    • gdb:源码级调试器。

4. 监测(Monitoring)

监测指定期、持续地采集和记录性能数据,以便进行历史查询、趋势分析和告警。

  • 常用工具:
    • sar:功能强大的系统活动数据收集器,可以收集CPU、内存、磁盘、网络等数十种指标,并能将数据存档以备查询。其历史日志通常位于/var/log/sa或/var/log/sar目录下。
    • SNMP:广泛应用于监控网络设备、服务器硬件的标准协议。
    • 代理(Agents):为获取特定应用(如数据库、Web服务器)的深度指标,常需安装专用代理(如Prometheus exporters)来收集并上报数据。

二、观测数据的来源

理解工具的数据来源,能让我们在标准工具受限时,直接获取原始信息,甚至开发自定义工具。

1. /proc 文件系统

/proc是一个由内核动态生成的虚拟文件系统,是众多性能工具的数据基石。

  • 系统信息:/proc/meminfo、/proc/cpuinfo、/proc/slabinfo等文件提供了系统级的性能数据。vmstat、top、free等命令正是读取这些文件。直接查看这些文件有时能获得比工具输出更详细的信息,例如/proc/meminfo会详细列出Slab缓存的使用情况,而free命令通常不显示此细节。
  • 进程信息:每个运行中的进程在/proc下都有一个以其PID命名的目录,包含该进程的详细信息。其中/proc/<PID>/fd/目录尤为实用,它包含了该进程打开的所有文件描述符的符号链接。当误删了被进程打开的文件(如日志文件)导致磁盘空间未释放时,可以通过清空对应的fd链接来释放空间,而无需重启进程。

2. /sys 文件系统

/sys(sysfs)是另一个重要的虚拟文件系统,它提供了一个用于查看和配置内核参数、硬件设备的统一接口。例如,在/sys/devices/system/cpu/目录下,可以查看每个CPU的在线状态、缓存信息,甚至通过向online文件写入0或1来动态下线或上线CPU。

3. 跟踪点(Tracepoints)、探针(Probes)与延时核算

  • Tracepoints:是内核代码中预置的静态检测点,例如在系统调用、块I/O请求发起和完成处都有。它们可以通过perf等工具进行跟踪,开销相对较低。使用perf list tracepoint可以查看可用的跟踪点。
  • kprobes & uprobes:分别是内核空间和用户空间的动态探针。与tracepoint相比,它们可以跟踪几乎任何内核或用户态函数,灵活性极高,是bpftrace等强大工具的基础。
  • 延时核算:当内核配置CONFIG_TASK_DELAY_ACCT启用后,可以跟踪每个任务的多种延时,包括:调度器延时(等待CPU)、块I/O延时(等待块I/O完成)、交换延时(等待换页)、内存回收延时。这对于分析应用延迟的根源至关重要。

三、核心工具 sar 与性能分析方法论启示

1. sar 工具详解

sar(System Activity Reporter)是本章重点介绍的多面手工具,它横跨了计数器、剖析(通过高频率采样)和监测三大功能。

  • 历史数据查询:如果系统已启用sar数据收集(通常由sysstat包中的sadc守护进程完成),则可以使用sar -u(CPU)、sar -n TCP(网络TCP指标)等命令查询历史数据。
  • 实时监控:也可以指定采样间隔和次数进行实时监控,例如sar -n TCP 1 5表示每秒采样一次TCP统计,共采样5次。

2. 本章对性能分析工作的核心启示

  • 工具选择需系统化:摒弃“街灯讹方法”,根据问题性质(是看整体计数还是追踪具体事件?是看系统还是单个进程?)选择工具象限,并经常组合使用多种工具。
  • 理解数据源头:掌握/proc和/sys,意味着在标准工具不可用或功能不足时,你依然有能力获取关键性能信息,甚至进行更深入的定制化分析。
  • 静态与动态结合:本章开头提到的静态性能工具(如ethtool、sysctl)用于检查系统配置,是性能分析的基础。修改sysctl参数虽能调优,但需谨慎,因其可能引发意外故障。
  • 为危机做准备:在生产环境中,尤其是最小化安装的系统,可能缺少许多工具。因此,提前配置好本地软件源(如yum源),确保能在需要时快速安装工具,是运维的必要准备。
  • 总之,第四章为我们绘制了一张详尽的Linux性能观测“地图”。它告诉我们有哪些“工具”(What),这些工具属于什么“类型”(Why),以及它们的数据从何而来(How)。掌握本章内容,是摆脱对单一工具的盲目依赖、进行科学、系统化性能分析的关键一步。

    赞(0)
    未经允许不得转载:171主机测评 » 《性能之巅》第四章 “观测工具” 读书笔记
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址