排查 Linux 性能问题,先确认“慢”发生在什么时间、哪些进程或服务受影响,再观察 CPU、内存、磁盘和网络的变化。单次快照容易误导:最好连续采样几次,和故障前或正常时的数据比较。以下命令多来自 procps、sysstat、iproute2 等软件包;不同发行版可能需要单独安装。

快速看整机:top、uptime、vmstat
uptime 显示运行时间、登录用户数和 1、5、15 分钟负载均值。负载均值表示处于可运行状态或等待不可中断任务的进程数量,不等于 CPU 使用率。要结合 CPU 核数和具体资源指标判断:负载持续高于可用 CPU 数量,可能有任务在排队,但也可能是进程在等磁盘等资源。
top 可以动态查看进程的 CPU 和内存占用。按 P 按 CPU 排序,按 M 按内存排序;关注 %Cpu(s) 中的 us(用户态)、sy(内核态)、wa(等待 I/O)和 id(空闲)。进程列表中的 %CPU 通常按一个逻辑 CPU 的满载能力计量,多核机器上进程超过 100% 并不一定异常。需要按进程持续采样时,可用 pidstat -u 1;它能显示每个任务在采样间隔内的 CPU 活动。pidstat 手册
vmstat 1 每秒输出一次内存、进程、交换和 I/O 概况。第一行往往是开机以来的平均值,后续行才是采样间隔内的变化。重点看 r(等待运行的进程)、b(不可中断睡眠进程)、si/so(换入、换出速率)和 wa。持续出现非零 si/so 可能说明内存压力导致交换活动,但不应只凭这一项就断定内存不足;还要结合应用表现和内存可用量。vmstat 手册
CPU:mpstat、pidstat、perf
整机 CPU 忙时,用 mpstat -P ALL 1 查看各核负载。如果总体空闲但某个核心长期接近满载,可能是单线程任务或线程调度不均。pidstat -u 1 则能帮助定位持续消耗 CPU 的进程。
如果 CPU 使用率高但进程和线程层面仍不清楚原因,可以用 perf 做采样分析。例如 perf top 查看系统中热点函数,perf record -g -- command 记录程序运行,再用 perf report 分析调用栈。perf 的事件支持、权限和采样开销受内核、硬件及系统配置影响,线上使用时应先确认采样范围和开销。
内存:free、ps、/proc 与 PSI
free -h 适合快速查看内存概况。不要把 free 列的数字直接理解为“应用还能用的内存”;Linux 会将空闲内存用于缓存,通常更应关注 available。ps -eo pid,comm,%mem,rss --sort=-rss | head 可以列出常驻内存较大的进程。RSS 是进程当前驻留在物理内存中的页数统计,多个进程共享的页可能重复计入,不能简单相加当作真实总占用。
若怀疑系统因内存紧张而卡顿,可查看 /proc/pressure/memory。PSI(压力停滞信息)描述任务因等待 CPU、内存或 I/O 而停顿的时间比例;它比单看“已用内存”更接近资源压力对任务的实际影响。内核配置及系统环境会影响 PSI 是否可用。
磁盘与文件系统:iostat、df、du
iostat -xz 1 连续查看块设备的吞吐、请求和等待情况。r/s、w/s 是读写请求速率,rMB/s、wMB/s 是吞吐,await 是平均 I/O 等待时间,%util 表示设备忙碌时间比例。高 await、持续队列积压或 %util 接近满载,都可能提示磁盘压力;但 SSD、RAID 和多队列设备可以并行处理请求,不能单凭 %util 判断设备已达性能上限。应结合延迟、吞吐、应用响应和设备类型综合判断。iostat 手册
空间不足时,df -h 查看文件系统容量,df -i 查看 inode 使用情况;空间充足但写入失败,也可能是 inode 耗尽。du -xhd1 /目录 可按目录统计占用,-x 限定在同一文件系统,避免跨挂载点扫描。定位占用前先确认目录和挂载点,避免把网络盘或容器挂载误当成本地磁盘。
网络与历史数据:ss、sar
ss -s 查看 socket 概况,ss -lntp 查看监听中的 TCP 端口及进程,ss -ant 查看 TCP 连接状态。连接数量异常、队列增长或大量连接堆积时,可进一步按端口、状态和进程筛选。ss 能查看 socket 统计和连接信息,但不能单独说明网络链路为何变慢。ss 手册
排查网卡吞吐可用 sar -n DEV 1 观察各接口收发速率;若安装并启用了 sysstat 的定时采集,也可用 sar -u、sar -r、sar -d 回看历史 CPU、内存和磁盘数据。sar 的历史结果取决于采集服务是否运行,事后才安装通常无法补回此前的数据。sar 手册
实用的排查顺序是:先用 uptime、top、vmstat 判断整体负载和资源方向,再用 pidstat、mpstat、iostat 或 ss 缩小到进程、核心、设备或连接。记录采样时间和当时的业务现象,避免把相关指标误当成根因。