Linux 运维实战
Linux 运维实战(一):5 个命令让你快速定位系统性能瓶颈
作者:艾德万斯
适用系统:CentOS 7/8、Ubuntu 20.04/22.04、KylinOS 等主流 Linux 发行版
前言
服务器变慢了,CPU 飙高了,磁盘打满了 —— 这是运维日常最常遇到的三个场景。
面对一台卡死的服务器,很多人第一反应是 top 看一眼,然后就不知道下一步该做什么了。
本文用 5 个命令 + 5 个实战场景,帮你建立一套系统性排查思路。读完这篇文章,下次线上出问题,你不会再慌。
一、整体情况摸底:top
top
这是最基础、也是必看的命令。重点关注几个指标:
top - 14:23:11 up 32 days, 3:21, 2 users, load average: 4.56, 3.21, 2.08
Tasks: 231 total, 2 running, 229 sleeping, 0 stopped, 0 zombie
%Cpu(s): 85.3 us, 10.2 sy, 0.0 ni, 3.5 id, 0.5 wa, 0.0 hi, 0.5 si
MiB Mem : 7956.8 total, 423.5 free, 4123.6 used, 3409.7 buff/cache
MiB Swap: 2048.0 total, 1024.3 free, 1023.7 used. 3123.4 avail Mem
- load average:1 分钟 / 5 分钟 / 15 分钟的平均负载。如果 5 分钟负载远大于 CPU 核心数,说明系统过载
- us / sy / wa / id:用户态 CPU / 内核态 CPU / IO 等待 / 空闲。
wa如果超过 10%,大概率磁盘在拖后腿 - 僵尸进程:
zombie出现非零值,说明有程序没有正确处理子进程退出
实战判断口诀:
负载高 + wa 高 → 磁盘 IO 瓶颈
负载高 + us 高 → CPU 密集型程序
负载高 + si 高 → 内存不足,频繁换页
负载低 + 响应慢 → 网络 / 应用层问题
二、CPU 占用排查:htop
htop
# 如果没有安装,先用 yum install epel-release && yum install htop 安装
top 够用,但 htop 更直观。安装它:
yum install epel-release -y
yum install htop -y
# Ubuntu 用户:apt install htop
htop 的优势:
| 功能 | 说明 |
|---|---|
| 彩色显示 | 一眼看出 CPU 各核心负载分布 |
| 树形视图 | 按 F5 切换到树形,看清进程父子关系 |
| 鼠标操作 | 可以直接点击排序、杀死进程 |
| 垂直/水平滚动 | 显示完整命令行,不会被截断 |
实战场景: 服务器 CPU 持续 100%,按 F6 选择 PERCENT_CPU 排序,找到最耗 CPU 的进程 PID,然后:
# 查看该进程的详细信息
ps -fp <PID>
# 查看该进程启动时的完整命令和参数
cat /proc/<PID>/cmdline | tr '\0' ' '
# 如果是个 Java 应用,用 jstack 看线程堆栈
jstack <PID>
三、磁盘 IO 排查:iostat
iostat -x 1 5
参数说明:每 1 秒输出一次,共输出 5 次。-x 显示扩展指标。
重点关注这列:
| 指标 | 解释 | 警戒线 |
|---|---|---|
%util |
磁盘繁忙程度 | > 80% 说明磁盘是瓶颈 |
r_await |
读请求平均等待时间 (ms) | > 10ms 偏慢,> 50ms 严重 |
w_await |
写请求平均等待时间 (ms) | 同上 |
rkB/s |
每秒读 KB | 结合磁盘理论性能判断 |
wkB/s |
每秒写 KB | 同上 |
实战案例:
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %util r_await w_await
sda 456.0 123.0 18240.0 4920.0 0.0 12.0 95.2 23.6 45.8
%util 95.2%,r_await 23.6ms —— 磁盘 IO 显然已经饱和了。
这个时候的处理思路:
# 1. 找到谁在疯狂读写
iotop -oP
# 2. 找到读写最频繁的目录
lsof +D /data 2>/dev/null | awk '{print $9}' | sort | uniq -c | sort -rn | head -10
四、内存排查:free + smem
free -h
total used free shared buff/cache available
Mem: 7.8G 4.1G 423M 245M 3.3G 3.1G
Swap: 2.0G 1.0G 1.0G
看 available 这一列,它才是程序真正可用的内存量。used 高不一定有问题,Linux 会主动用空闲内存做缓存。
Swap 使用量持续增长才是真正的危险信号。
# 查看 Swap 使用排行
for i in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $i 2>/dev/null
done | sort -k2 -rn | head -10
这条命令会输出占用 Swap 最多的前 10 个进程,帮你找到内存大户。
快速释放缓存(不重启,不影响业务):
# 清理页面缓存(建议在业务低峰期执行)
sync && echo 3 > /proc/sys/vm/drop_caches
五、网络排查:ss + iperf
# 查看当前所有 TCP 连接
ss -tunap
# 统计各种连接状态的数量
ss -tun | awk '{print $1}' | sort | uniq -c
如果发现 TIME_WAIT 数量上万:
# 调整内核参数,加快连接回收
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
EOF
sysctl -p
排查网络延迟:
# mtr 结合 traceroute 和 ping,定位网络瓶颈
mtr -r <目标IP>
# iperf 测试带宽(需要服务端和客户端都装)
# 服务端:iperf3 -s
# 客户端:iperf3 -c <服务端IP>
附:快速排障思维导图
服务器卡慢
├── top → 看 load average
│ ├── wa 高 → iostat → 磁盘瓶颈
│ ├── us 高 → htop → CPU 瓶颈
│ ├── si 高 → free → 内存不足
│ └── 一切正常 → 网络/应用层
│
├── 网络问题 → ss/mtr/curl 测试
│
└── 应用问题 → 日志是最终答案
tail -f /var/log/messages
journalctl -xe
写在最后
这 5 个命令覆盖了 CPU、内存、磁盘、网络 四个维度,能解决 80% 的日常故障排查场景。
建议你把常用命令和参数记在笔记里,下次出了问题,不用 Google 就能直接上手。
下一篇预告:《Linux 运维实战(二):磁盘满了怎么办 —— 清理与扩容全攻略》
如果你有想看的主题,欢迎评论区留言。
更多推荐




所有评论(0)