Linux 服务器卡顿?一张图理清排查思路

Linux 服务器卡顿?一张图理清排查思路

服务器「变慢」是一个极其模糊的表象。在盲目重启之前,先回答一个问题:是 CPU 满了、内存爆了、磁盘 IO 堵了,还是网络卡了? 用「自上而下」的顺序逐个排除,能省下大量时间。

1. 先看整体负载

# 1 分钟 / 5 分钟 / 15 分钟平均负载
uptime

# 动态查看 CPU、内存、进程
top -c

经验值:平均负载长期超过「逻辑 CPU 核数」的 70%,就需要警惕。

2. 内存与 Swap

free -h
# 若 available 持续很低且 si/so(swap 换入换出)不为 0,说明在频繁换页
vmstat 1

内存不足时系统会启用 Swap,而磁盘比内存慢几个数量级,表现为进程「假死」。

3. 磁盘 IO 瓶颈

# 查看每块磁盘的 util 与 await
iostat -x 1

# 找出正在大量读写的进程
iotop

%util 接近 100% 且 await 很高,就是磁盘成了瓶颈,常见于日志狂写或缺少索引的数据库全表扫描。

4. 网络问题

# 查看连接数、重传、丢包
ss -s
netstat -i   # 看 RX/TX 错误与丢包

# 抓包确认是否有异常重传
tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-rst|tcp-syn) != 0' -c 20

5. 深入到进程内部

确认是某个进程吃资源后,用 perf 做火焰图定位热点函数:

perf record -F 99 -p <pid> -g -- sleep 30
perf report

排查原则:先宏观(负载/资源)再微观(进程/函数),每一层都用数据说话,不要凭感觉「先重启试试」。

小结

uptime → top → free/iostat → ss/perf 串成肌肉记忆,遇到卡顿你就能在几分钟内说出「慢在哪」。运维的本质,是用系统化手段把混沌的「慢」拆成可观测的指标。