找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2723

积分

0

好友

393

主题
发表于 昨天 09:34 | 查看: 6| 回复: 0

深入理解Linux操作系统的底层原理和性能表现,离不开一系列强大的工具。掌握这些性能分析工具,不仅能帮助定位问题,更是检验系统知识的试金石。性能分析和优化是一个系统工程,需要结合计算机系统、网络和操作系统等多方面知识。

背景知识是分析性能问题的基础。例如,硬件缓存的工作机制、操作系统内核的调度策略,都会以意想不到的方式影响应用程序的表现。某些程序若无法有效利用缓存,就可能导致性能瓶颈。

性能分析工具

首先来看一张著名的Linux性能分析工具全景图,它清晰地展示了各类工具与系统组件的关系:

Linux性能分析与工具架构关系图

这张图由性能分析专家Brendan Gregg分享,涵盖了从应用层到硬件层的观测点。图中所有工具都可以通过 man 命令查阅详细文档。下面我们来逐一介绍这些核心工具的常规用法。

1. vmstat – 虚拟内存统计

vmstat (Virtual Memory Statistics) 是监控内存、进程和CPU整体状况的常用工具。其常规用法为 vmstat [interval] [times],表示每隔 interval 秒采样一次,共采样 times 次。若省略次数,则持续采集直到手动停止(Ctrl+C)。例如:

vmstat命令输出示例

输出结果解读:

  • 第一行:自系统启动以来的平均值。
  • 后续行:展示每个采样间隔(本例为5秒)内发生的情况。

各列含义如下:

  • procs
    • r:等待CPU的进程数。
    • b:处于不可中断睡眠(通常是在等待I/O)的进程数。
  • memory
    • swpd:已使用的虚拟内存大小。
    • free:空闲的物理内存大小。
    • buff:用作缓冲区的内存大小。
    • cache:用作操作缓存的的内存大小。
  • swap
    • si:每秒从磁盘换入的内存大小。
    • so:每秒换出到磁盘的内存大小。
  • io
    • bi:每秒从块设备读取的块数。
    • bo:每秒写入块设备的块数。
  • system
    • in:每秒中断数。
    • cs:每秒上下文切换次数。
  • cpu(百分比):
    • us:用户态CPU时间。
    • sy:内核态CPU时间。
    • id:空闲CPU时间。
    • wa:等待I/O的CPU时间。

内存不足的典型表现free内存急剧减少,buffercache被大量回收,swpd使用量高,si/so(页面交换)频繁,bi/bo(磁盘I/O)增多,in(缺页中断)增多,cs(上下文切换)增多,b(等待I/O进程)增多,wa(I/O等待CPU时间)占比高。

2. iostat – CPU与设备I/O统计

iostat 用于报告CPU统计信息及系统、磁盘、tty设备的输入/输出统计。默认显示与vmstat类似的CPU信息,使用 -d 参数显示设备详细统计,-x 显示扩展信息:

iostat命令输出示例

第一行是系统启动以来的平均值,后续为增量平均值。常见磁盘I/O指标缩写规律:rq(request), r(read), w(write), qu(queue), sz(size), avg(average), tm(time), svc(service)。

关键指标解读:

  • rrqm/s, wrqm/s:每秒合并的读/写请求数。
  • r/s, w/s:每秒发送到设备的读/写请求数。
  • rsec/s, wsec/s:每秒读/写的扇区数。
  • avgrq-sz:平均请求扇区数。
  • avgqu-sz:平均请求队列长度。
  • await:平均I/O请求处理时间(包括队列等待和服务时间)。
  • svctm:平均I/O请求服务时间(设备实际处理时间)。
  • %util:设备带宽利用率(有I/O请求的时间百分比)。

3. dstat – 多功能系统监控工具

dstat 综合显示了CPU、磁盘I/O、网络流量、分页活动等多种资源使用情况。其输出为彩色,信息比vmstatiostat更详细直观。直接输入 dstat 命令即可使用,也可以通过参数定制显示内容。

4. iotop – 进程级磁盘I/O监控

iotop 是一个类似 top 的交互式工具,专门用于实时监控各个进程的磁盘I/O使用情况。可以方便地查看是哪个进程产生了高I/O负载。也可以非交互式运行:

iotop –bod [interval]

要查看每个进程的I/O,也可以使用 pidstat

pidstat -d [interval]

5. pidstat – 监控进程资源占用

pidstat 主要用于监控全部或指定进程对系统资源(CPU、内存、设备I/O、上下文切换等)的占用情况。

  • 监控进程I/O: pidstat –d [interval]
  • 监控进程CPU: pidstat –u [interval]
  • 监控进程内存: pidstat –r [interval]

6. top – 经典的进程动态监视器

top 命令的汇总区域显示了五个方面的系统性能信息:

  1. 系统负载:运行时间、登录用户数、系统平均负载(1, 5, 15分钟)。
  2. 进程状态:运行、睡眠、停止、僵尸进程的数量。
  3. CPU状态:用户态、内核态、nice调整、空闲、等待I/O、处理硬中断/软中断的时间百分比。
  4. 内存状态:总量、已用、空闲(系统视角)、缓冲区、缓存的使用量。
  5. 交换分区:总量、已用、空闲。

任务区域默认显示:进程ID、有效用户、优先级、NI值、虚拟内存使用(VIRT)、常驻物理内存(RES)、共享内存(SHR)、进程状态(S)、CPU占用率(%CPU)、内存占用率(%MEM)、累计CPU时间(TIME+)、命令行(COMMAND)。

7. htop – top的增强版

htop 是一个交互性更强、体验更好的进程查看器。相比 top,其优点包括:

  • 支持横向/纵向滚动,可查看完整的进程列表和命令行。
  • 启动速度通常更快。
  • 杀进程时直接用鼠标或键盘选择,无需输入PID。
  • 支持鼠标操作,并具有更丰富的颜色主题。

8. mpstat – 多处理器CPU统计

mpstat (Multiprocessor Statistics) 是实时系统监控工具,报告CPU统计信息(数据来源于 /proc/stat)。在多CPU系统中,既能查看所有CPU的平均状况,也能查看指定CPU的信息。

常见用法:mpstat –P ALL [interval] [times]

9. netstat – 网络连接与统计信息

netstat 用于显示与IP、TCP、UDP和ICMP协议相关的网络连接与统计信息,常用于检查本机各端口的网络连接情况。它涵盖了从基础连接到网络/系统路由、接口状态等广泛信息。

常见用法:

netstat -npl      # 查看监听端口及对应进程。
netstat -rn       # 打印内核路由表信息。
netstat -i        # 显示网络接口信息,包括MTU、收发数据包、错误、冲突数等。

10. ps – 进程状态快照

ps (Process Status) 用于显示当前时刻的进程状态快照,参数组合非常丰富,可通过 man ps 深入学习。

常用命令:

ps aux          # 查看所有进程的详细信息。
ps –ef | grep [keyword] # 过滤查找特定进程。

杀进程组合命令示例:

ps aux | grep mysqld | grep –v grep | awk ‘{print $2}’ | xargs kill -9

杀僵尸进程:

ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9

11. strace – 系统调用跟踪

strace 跟踪程序执行过程中产生的系统调用及接收到的信号,是分析程序异常行为的利器。

举例:查看 mysqld 启动时尝试加载的配置文件路径:

strace -e stat64 mysqld --print-defaults > /dev/null

12. uptime – 系统运行时间与负载

uptime 命令简洁地输出系统运行时长和平均负载。其输出的最后三个数字分别代表过去1分钟、5分钟、15分钟的系统平均负载。

13. lsof – 列出打开文件

lsof (list open files) 列出当前系统打开的文件(包括网络连接、设备等),是系统检测和排错的重要工具。

常见用法:

lsof /boot                # 查看谁正在使用`/boot`文件系统(阻塞卸载)。
lsof -i :3306             # 查看哪个进程占用了3306端口。
lsof -u username          # 查看指定用户打开的所有文件。
lsof -p 4838              # 查看指定进程打开的所有文件。
lsof -i @192.168.34.128   # 查看与指定IP的网络连接。

14. perf – Linux内核性能分析器

perf 是Linux内核自带的性能分析工具,与内核紧密结合,能利用最新内核特性。它可用于查看热点函数、缓存命中率等,帮助开发者优化程序性能。

其基本原理是基于事件采样。例如,根据tick中断进行采样,统计采样点落在各个函数上下文中的频率。如果某个函数(如foo())消耗了90%的时间,那么采样点也应有约90%落在此函数中。通过分析采样结果,即可定位性能瓶颈。

工具使用思路总结

结合以上介绍的性能分析命令,再回顾开篇的性能分析工具架构图,就可以初步建立起性能分析的知识框架:遇到CPU瓶颈时该用哪些工具,遇到I/O瓶颈时又该用哪些工具。

进阶性能测试与调优工具

在熟练使用上述基础分析命令后,可以进一步了解一些更强大的性能测试与调优工具集。它们往往提供了更深度的洞察和更强大的功能,是进行运维/DevOps/SRE工作的利器。

  • perf_events: 即 perf 工具,随内核发布维护,可用于应用和内核的性能统计。
  • eBPF tools: 基于eBPF (Extended BPF) 技术的性能追踪工具集,通过bcc等工具实现,允许用户空间自定义内核追踪和操作程序。
  • perf-tools: 一套基于 perf_eventsftrace 的简单易用的性能分析脚本合集。
  • bcc (BPF Compiler Collection): 一套用于创建高效内核追踪和操作程序的工具包,包含许多实用的工具和示例,需要Linux 4.1以上内核支持。
  • ktap: 一种新型的Linux动态追踪脚本工具,设计上注重交互性和可定制性,类似于DTrace和SystemTap。
  • Flame Graphs(火焰图): 一款可视化性能分析工具,将 perfsystemtap等工具采集的堆栈信息生成直观的火焰图形,用于快速识别最频繁的代码路径。源码位于 github.com/brendangregg/flamegraph

1. Linux 性能观测工具全景

下图更详细地展示了Linux系统中各观察点与对应工具的关系:

Linux性能可观测性工具架构图

  • 基础工具uptime, top/htop, mpstat, iostat, vmstat, free, ping, nicstat, dstat
  • 高级工具sar, netstat, pidstat, strace, tcpdump, blktrace, iotop, slabtop, sysctl, 分析 /proc 文件系统。

2. Linux 性能基准测试工具

要对系统进行性能测评,可以使用专门的基准测试工具,下图展示了不同测试目标对应的工具:

Linux性能基准测试工具架构图

3. Linux 性能调优工具

性能调优往往涉及内核参数、调度策略、I/O优先级等深层次设置,下图汇总了相关的调优工具:

Linux性能调优工具架构图

4. sar – 全面的系统活动报告器

sar (System Activity Reporter) 是Linux上功能最全面的系统性能数据收集和分析工具之一。它能够从文件读写、系统调用、磁盘I/O、CPU、内存、进程活动等多个维度进行历史数据收集和实时报告。

sar 的常规使用方式:sar [options] [-A] [-o file] t [n]

  • t: 采样间隔(秒)。
  • n: 采样次数。
  • -o file: 将二进制结果存入文件。

sar工具监控维度架构图

掌握这些工具,意味着你拥有了从现象到本质分析Linux系统性能问题的能力。实践是学习的最好方式,建议在测试环境中多多练习使用。如果你想与更多开发者交流系统性能优化的经验,欢迎访问云栈社区,那里有丰富的技术讨论和资源共享。




上一篇:独居安全如何保障?这款开源Android应用KeepAlive提供紧急联系人自动通知方案
下一篇:DDR3主板市场热度回升:旧平台魔改与性价比之选分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-18 16:48 , Processed in 0.313683 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表