做运维和开发的朋友十有八九都遇到过这种场景:线上服务器突然飘红,CPU跑满、内存告急、磁盘IO卡到业务超时,收到告警后第一时间登上机器,却不知道该从哪条命令入手。这时候手里有没有一套顺手且好记的Linux系统性能排查常用指令,基本就决定了你是10分钟止血,还是被问题拖住一整个下午。
这篇文章我用自己多年排查线上故障的实际经验,把Linux性能排查的路线、指令和读数方法串起来讲清楚。适合刚入门运维想建立排查体系的同学,也适合经常在服务器上处理问题的后端研发和SRE参考。内容涵盖CPU、内存、磁盘IO、系统负载这几大块,每个指标怎么读、什么时候报警、怎么顺着命令一路揪出元凶,都会写到,提供的指令和判断基准都是可以直接抄作业的那种。
1. 排查思路与指令体系的整体设计
上手敲命令之前,得先想明白一件事情:性能排查不是把top、free、vmstat全敲一遍,而是“带着问题去找数据”。如果在CPU告警时去盯着free看半天,或者在内存不足时反复看top的进程列表,方向就歪了。
1.1 从“症状”到“根因”的三层思路
我把整个排查过程分成三层,每一层对应不同的指令目标。
第一层是看整体状态。登进机器之后不要急着看进程,先用uptime和top这类命令看系统整体负载、CPU空闲比例、内存剩余情况,回答一个核心问题:这个节点现在到底是什么资源最紧张?这一步的目标是把“哪里有问题”框定出来。
第二层是找具体进程。整体状态确认之后,再用top或者ps等指令锁定是哪个进程在消耗资源。举个例子,如果第一层发现CPU几乎跑满,那第二层就要确认究竟是Java服务还是数据库进程在吃CPU,把范围从服务器收敛到进程。
第三层是分析根因。进程锁定之后,用vmstat看上下文切换和运行队列,用iostat看IO等待,用pidstat配合线程号定位到具体线程,甚至用perf采样看热点函数。这一层的目标是回答“为什么是它在消耗”。
这样三层走下来,整个排查过程就是一条清晰的链路:节点到进程、进程到线程、线程到代码。反向操作很容易出问题——先看了一堆细粒度指标,最后连整体状态都没搞清,等于带着放大镜跑马拉松。
1.2 常用性能排查指令全景图与选型逻辑
Linux性能排查的命令工具非常多,但真正高频使用、能覆盖绝大多数场景的其实有限。我按排查目标做了个整理:
| 排查目标 | 首选指令 | 辅助指令 | 典型场景 |
|---|---|---|---|
| 整体负载 | uptime | top、w | 判断当前机器是不是已经过载 |
| CPU使用率 | top | mpstat、pidstat、perf | 定位CPU占用高的进程和线程 |
| 内存使用 | free | top、smem、pmap | 判断物理内存是否不足或泄漏 |
| 磁盘空间 | df | du、lsof | 排查磁盘满导致的写入失败 |
| 磁盘IO | iostat | iotop、pidstat -d | 定位IO等待和磁盘瓶颈 |
| 网络连接 | ss | netstat、sar -n DEV | 排查连接数过高、流量异常 |
| 历史性能数据 | sar | - | 复盘故障时间点的现场 |
选型逻辑很简单:优先用系统自带的、输出信息密度高的命令,实在不够再上性能分析工具。为什么我很少推荐一上来就装perf、systemtap这种重型分析工具?因为线上环境安装权限不一定有,而且对新手来说输出太难解读。top、vmstat、iostat、free这一套是每个Linux发行版默认自带的,覆盖面也足够应对九成以上的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心指令输出拆解:数据该读哪一列
命令敲下去,输出一大屏,真正需要关心的往往只有两三列。这一节我把每个高频指令的关键读数列出来,并给出我平时用的判断阈值和解读思路。
2.1 uptime与整体负载:load average怎么看
uptime是性能排查的第一个命令,它输出一行很关键的数据:load average。这个值包含1分钟、5分钟、15分钟三个数,分别代表过去1分钟、5分钟、15分钟的平均活跃进程数。
很多人看到load超过1就以为机器挂了,其实这是误解。load average要结合CPU核数来判断:如果你的机器是8核,load在8左右说明刚好满载;超过8说明有任务在排队;如果是2核机器,load到4就已经相当危险了。判断标准可以简单记成:load值除以CPU核数,超过0.7就要警惕,持续超过1.0就需要介入处理。
还要注意一个细节:load averag
