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 运维实战(二):磁盘满了怎么办 —— 清理与扩容全攻略》

如果你有想看的主题,欢迎评论区留言。


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐