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

3254

积分

0

好友

421

主题
发表于 1 小时前 | 查看: 3| 回复: 0

出于对Linux操作系统底层知识的兴趣与探求,我整理了这份涵盖系统性能分析与常用工具的文章。它不仅能帮助你检验基础知识,也涉及了系统管理的多个方面。掌握这些工具,离不开扎实的计算机系统、网络和操作系统知识,而系统性能分析与优化本身也是一个需要长期实践的领域。

性能分析工具

首先,来看一张由性能工程专家Brendan Gregg分享的经典工具全景图,它清晰地展示了不同系统层级对应的观测工具:

Linux性能分析与工具架构图

上图涵盖了丰富的系统性能分析工具,每个工具都可以通过 man 命令查看详细帮助文档。下面,我们将对其中一些核心工具进行介绍。

vmstat -- 虚拟内存统计

vmstat(Virtual Memory Statistics)是Linux中监控内存的常用工具,它能对操作系统的虚拟内存、进程、CPU等整体状况进行监视。其常规用法为 vmstat interval times,即每隔 interval 秒采样一次,共采样 times 次。若省略 times,则会持续采集数据直至手动停止。

例如,执行以下命令进行采样:

vmstat 5

vmstat命令输出示例

使用 Ctrl+C 即可停止采集。输出结果中,第一行显示了系统自启动以来的平均值,第二行开始展示实时动态,后续每行代表一个5秒间隔的数据。各列含义如下:

  • procsr 列显示等待CPU的进程数,b 列显示处于不可中断睡眠(通常是在等待I/O)的进程数。
  • memoryswpd 列显示被换出到磁盘的内存量(单位:KB)。其余列分别显示空闲内存、用作缓冲区的内存和用作操作系统缓存的内存量。
  • swap:显示交换活动,即每秒从磁盘换入 (si) 和换出到磁盘 (so) 的内存块数量。
  • io:显示每秒从块设备读取 (bi) 和写入 (bo) 的块数,这通常反映了硬盘I/O活动。
  • system:显示每秒发生的中断 (in) 和上下文切换 (cs) 数量。
  • cpu:显示CPU时间花费在各类操作上的百分比,包括执行用户代码 (us)、执行系统代码 (sy)、空闲 (id) 以及等待I/O (wa)。

如何识别内存不足? 通常表现为:可用内存 (free) 急剧减少,即使回收缓冲区 (buff) 和缓存 (cache) 也效果甚微;交换分区使用量 (swpd) 持续增加且页面交换 (si/so) 频繁;磁盘I/O (bi/bo) 增多;缺页中断 (in) 上升;上下文切换 (cs) 加剧;等待I/O的进程数 (b) 变多;大量CPU时间耗费在等待I/O上 (wa 值高)。

iostat -- 用于报告中央处理器统计信息

iostat 用于报告CPU统计信息以及系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息。其默认显示与 vmstat 相似的CPU使用信息,使用 -d 选项可以显示扩展的设备统计信息,-x 选项能提供更详细的扩展报告。

iostat -dx 5

iostat命令输出示例

第一行显示系统启动以来的平均值,后续行显示增量平均值,每个设备独占一行。了解Linux磁盘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:平均请求(服务)时间(通常指磁盘处理请求的时间)。
  • %util:设备有至少一个活跃请求的时间百分比,即设备繁忙程度。

dstat -- 系统监控工具

dstat 是一个功能丰富的性能监控工具,它用彩色输出直观地展示了CPU使用率、磁盘I/O、网络流量和内存分页等情况,相比 vmstatiostat 信息更详细、可读性更强。直接输入 dstat 命令即可使用,也可通过参数定制显示内容。

例如,使用以下命令组合查看多项指标:

dstat -cdlmnpsy

dstat命令输出示例

iotop -- LINUX进程实时监控工具

iotop 命令专门用于监视磁盘I/O,其界面风格类似于 top 命令,可以清晰地显示是哪个进程产生了I/O负载。它是一个交互式的top类工具,展示PID、用户、I/O速率、进程等相关信息。

你也可以以非交互方式运行它:

iotop -bod interval

若需查看每个进程的I/O情况,也可以使用 pidstat 命令:

pidstat -d interval

pidstat -- 监控系统资源情况

pidstat 主要用于监控全部或指定进程占用系统资源的情况,如CPU、内存、设备I/O、任务切换、线程等。它是分析进程级性能问题的利器。

  • 监控进程I/O:

    pidstat -d interval
  • 统计CPU使用信息:

    pidstat -u interval
  • 统计内存信息:

    pidstat -r interval

top

top 命令是最经典的实时系统监控工具。其顶部汇总区域显示了五个方面的系统性能信息:

  1. 系统负载与时间:当前时间、登录用户数、系统1/5/15分钟平均负载。
  2. 进程状态:运行中、睡眠中、已停止、僵尸进程的数量。
  3. CPU使用率:用户态 (us)、核心态 (sy)、低优先级 (ni)、空闲 (id)、等待I/O (wa)、处理硬件中断 (hi)、处理软件中断 (si) 的时间百分比。
  4. 内存使用:物理内存总量、已用量、空闲量(系统视角)、缓冲区用量、缓存用量。
  5. 交换分区:交换分区总量、已用量、空闲量。

任务区域默认显示:进程ID、有效用户、进程优先级、NICE值、进程使用的虚拟内存、物理内存和共享内存、进程状态、CPU占用率、内存占用率、累计CPU时间以及进程命令行信息。

htop

htop 是 Linux 系统中的一个交互式进程查看器,一个在控制台或X终端中运行的文本模式应用程序(需要 ncurses 库支持)。

htop进程监控界面

htop 允许用户进行交互式操作,支持颜色主题,可以横向或纵向滚动浏览进程列表,甚至支持鼠标点击操作。与 top 相比,它的优点包括:

  • 可以横向或纵向滚动,以便查看所有进程和完整的命令行。
  • 通常启动速度比 top 更快。
  • 结束进程时无需输入进程号,使用功能键即可。
  • 支持鼠标操作,体验更友好。

mpstat

mpstat(Multiprocessor Statistics)是实时系统监控工具,用于报告CPU的统计信息,这些信息来源于 /proc/stat 文件。在多CPU(多核)系统中,它不仅能查看所有CPU的平均状况,还能查看特定CPU的详细信息。

常见用法:

mpstat -P ALL interval times

netstat

netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,常用于检查本机各端口的网络连接情况和网络状态

常见用法:

  1. 查看监听端口及对应进程:

    netstat -npl   # 可以查看你要打开的端口是否已经打开。
  2. 打印路由表信息:

    netstat -rn
  3. 提供系统上的网络接口信息:

    netstat -in    # 打印每个接口的MTU、输入/输出分组数、错误数、冲突数以及当前输出队列长度。

ps -- 显示当前进程的状态

ps 命令参数繁多,具体使用方法可参考 man ps

一些常用的方法:

  1. 显示所有进程的详细信息:

    ps aux
  2. 结合 grep 查找特定进程:

    ps -ef | grep process_name

示例:结束指定程序

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

示例:清理僵尸进程

ps -eal | awk '{if ($2 == "Z"){print $4}}' | xargs kill -9

strace

strace 用于跟踪程序执行过程中产生的系统调用及接收到的信号,是分析程序或命令执行中遇到异常情况的强大工具。

举例:查看 mysqld 在 Linux 上加载了哪种配置文件,可以运行:

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

uptime

uptime 命令能够打印系统总共运行了多长时间以及系统的平均负载。其输出的最后三个数字分别代表过去1分钟、5分钟、15分钟内系统的平均负载。

lsof

lsof(list open files)是一个列出当前系统打开文件的工具。通过它,可以查看文件、网络连接等被哪些进程使用,常用于系统检测和排错。

常见用法:

  • 查看文件系统阻塞(例如查看谁正在使用 /boot 目录):

    lsof /boot
  • 查看端口号被哪个进程占用(例如查看3306端口):

    lsof -i :3306
  • 查看用户打开了哪些文件

    lsof -u username
  • 查看进程打开了哪些文件(例如查看PID为4838的进程):

    lsof -p 4838
  • 查看远程已打开的网络连接

    lsof -i @192.168.34.128

perf

perf 是 Linux kernel 自带的系统性能优化工具。其最大优势在于与 Linux Kernel 的紧密结合,能够利用内核加入的新特性。它可以用来查看热点函数、分析缓存命中率等,从而帮助开发者优化程序性能。

perfOprofile 等性能调优工具的基本原理都是对被监测对象进行采样。最简单的情况是根据 tick 中断进行采样:在 tick 中断内触发采样点,并记录采样点时程序的上下文。如果一个程序90%的时间都花费在函数 foo() 上,那么在足够高频率和足够长时间的采样下,大约90%的采样点都应该落在函数 foo() 的上下文中。通过这种方式,我们可以了解程序中的性能热点,从而进行针对性优化。

工具使用小结

结合以上常用的性能分析命令,并回顾开篇的性能分析工具全景图,我们可以初步建立认知:在分析系统不同方面的性能时,应该优先考虑使用对应的工具。

常用的性能测试工具

在熟悉了第二部分的基础性能分析命令后,我们可以进一步了解一些更强大的性能测试与剖析工具。首先简单认识以下几个:

  • perf_events:一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护。它既可用于应用程序的性能统计分析,也可应用于内核代码的性能统计和分析。
  • eBPF tools:一套使用 BPF 编译器集合(BCC)进行性能追踪的工具。eBPF 程序可以创建自定义的内核跟踪和操作程序,功能强大且灵活。
  • perf-tools:一套基于 perf_events 和 ftrace 的 Linux 性能分析调优工具集。它依赖库少,使用简单,支持 Linux 3.2 及以上内核。
  • bcc (BPF Compiler Collection):一套使用 eBPF 创建高效内核跟踪和操作程序的工具包,包含许多有用的工具和示例。它需要 Linux 4.1 以上内核版本支持。
  • ktap:一种新型的 Linux 脚本化动态性能跟踪工具,允许用户动态跟踪 Linux 内核,设计上注重交互性,类似于 Solaris DTrace 和 SystemTap。
  • Flame Graphs(火焰图):一款使用 perf、systemtap、ktap 等工具生成的可视化性能分析图形。它能让最频繁执行的代码路径被快速准确地识别。生成程序的开源代码位于 github.com/brendangregg/flamegraph

Linux 性能观测工具

下图更详细地展示了Linux性能可观测性工具的全貌:

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

基础工具 (Basic Tools):建议首先学习掌握,例如 uptime, top/htop, mpstat, iostat, vmstat, free, ping, nicstat, dstat

高级工具 (Advanced Tools):在基础之上升级,例如 sar, netstat, pidstat, strace, tcpdump, blktrace, iotop, slabtop, sysctl,以及直接读取 /proc 文件系统。

Linux 性能测评工具

下图展示了用于对系统不同模块进行性能基准测试的工具:

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

这是一类性能测评工具,针对CPU、内存、磁盘、网络等不同模块,可以使用相应的工具(如 sysbench, iperf, fio 等)进行压力测试和性能评估。

Linux 性能调优工具

性能调优往往需要深入系统内部,下图展示了从内核、系统配置层面进行调优的相关工具:

Linux性能调优工具架构图

这些工具(如 sysctl, tune2fs, ethtool, tc 等)主要用于调整内核参数、文件系统选项、网络队列等,以实现性能优化。想要深入了解,需要结合Linux内核知识进行学习。

Linux 性能观测工具 sar

sar(System Activity Reporter,系统活动情况报告)是 Linux 上功能最为全面的系统性能分析工具之一,能够从文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC活动等多个方面对系统活动进行报告。

下图展示了 sar 命令丰富的监控选项:

sar命令监控选项架构图

sar 的常规使用方式:

sar [options] [-A] [-o file] t [n]

其中:

  • t 为采样间隔(秒)。
  • n 为采样次数,默认值为1。
  • -o file 表示将命令结果以二进制格式存放在指定文件 file 中。

熟练掌握这些工具,是每一位Linux系统管理员和开发者进行服务器运维、性能问题诊断的必备技能。实践出真知,建议在云栈社区等平台与更多同行交流实战经验,共同成长。




上一篇:未来不远机器人再获数亿元融资,具身智能累计服务3万小时家庭场景
下一篇:UI设计案例解析:如何让邀请页面从“平平无奇”到“充满邀请感”
您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2026-3-10 10:10 , Processed in 0.535434 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

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