返回首页

Linux 服务器性能排查实战手册 — 三板斧/案例/阈值/参数速查

📅 创建于 2026-05-28 🔄 更新于 2026-05-28 📝 649 字

来源:improve everyday | 发布日期:2026-05-22

Linux 服务器性能排查实战手册

五条排查原则: 先整体后局部,先 CPU 后内存,IO 网络配合看。vmstat/iostat 摸全局 → 确定问题类型 → 逐层深入 → 交叉验证 → 找到根因再处置。

快速摸底三板斧

60 秒快速摸底三连

# 1. 看负载 — load > CPU 核心数说明有资源争抢
uptime
# 10:30:05  load average: 12.85, 10.21, 8.10

# 2. 看全局 — 一屏掌握 CPU/内存/IO/Swap
vmstat 2 5
# r  b  swpd  free  buff cache  si  so  bi  bo  in  cs  us sy id wa
# 2  0     0  2048  123   789   0   0  50 100 500 1000 10  5 80  5

# 3. 查 CPU 核心数(判断负载是否过高的基准)
nproc

四个关键信号

  • r(运行队列) 持续 > CPU 核心数 × 4 → CPU 资源争抢严重
  • wa(IO 等待)> 20% → 磁盘或网络 IO 瓶颈
  • si/so(Swap 换页) 持续不为 0 → 内存真实不足
  • id(空闲率) 持续低于 30% → 需关注

详细的多维排查方案参见 server-performance-four-dimensions(CPU/内存/磁盘/网络/文件系统五维深度解析)。

四大瓶颈快速排查

CPU 瓶颈

# 定位高 CPU 进程
ps aux --sort=-%cpu | head -10

# 查看进程内所有线程
top -H -p <PID>

# 跟踪系统调用
strace -p <PID> -c

判断: us 高 + sy 低 = 业务代码密集计算;wa 高 = 进程在等 IO;hi/si 高 = 网络/存储中断异常。

内存瓶颈

# 看 available,不是 free
free -h

# 内存泄漏检测:监控 RSS 是否持续增长
for i in {1..20}; do ps -o pid,rss,vsz,comm -p <PID>; sleep 10; done

# 查看哪些进程占用了 Swap
for f in /proc/*/status; do awk '/VmSwap/{print FILENAME,$2,$3}' $f; done | sort -k2 -n -r | head -10

磁盘 IO 瓶颈

iostat -x 2 5

# 定位 IO 最多的进程(需 root)
iotop -o

# 查看进程打开了哪些文件
lsof -p <PID>

# 查看目录空间占用
du -sh /var/log/* | sort -rh | head -10

%util = 100% → 设备已饱和;await HDD <20ms,SSD <1ms;aqu-sz > 1 → IO 排队。

网络瓶颈

# 网络连接概览
ss -s

# 统计各 TCP 状态连接数
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

# 查看哪些 IP 连接最多
netstat -an | awk '/^tcp/{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

# 监控网卡实时流量
iftop -i eth0

生产事故速查(3 个典型案例)

CASE 01:Java Full GC 导致接口飙升至 8s

现象: 促销期间接口响应从 200ms 飙升到 8s。

  • top 看 CPU 不高,但 load average 异常偏高
  • jstat -gc <PID> 1000 发现每次 Full GC 耗时 > 2s
  • jmap -heap <PID> 确认老年代使用率 > 95%

根因: JVM heap 配置 8GB,GC 扫描区域过大。 修复: 降 heap 至 4GB,切换 G1GC;设 MaxGCPauseMillis=200

CASE 02:Nginx 502 Bad Gateway

现象: 网站突然全线返回 502。

  • netstat 发现 80 端口连接数超 60000
  • 排查发现 PHP-FPM 仅 50 个 worker
  • pm.max_children = 50 严重不足

根因: PHP-FPM 进程数严重不足,请求大量排队。 修复: max_children 调至 200;配合 Nginx keepalive 200 优化连接复用。

CASE 03:MySQL 慢查询导致首页加载 10s

现象: 论坛首页加载 10s,数据库有查询跑了 5 分钟。

  • SHOW PROCESSLIST 发现多条 SQL 运行超 30s
  • EXPLAIN 确认 posts 表全表扫描,无索引
  • 开启 slow_query_loglong_query_time=2

根因: posts 表缺少 (user_id, created_at) 联合索引。 修复: 低峰期 ALTER TABLE 添加索引;响应时间恢复 < 200ms。

高频优化参数速查

/etc/sysctl.conf — 内核参数

# TCP 优化
net.ipv4.tcp_syncookies = 1          # 防 SYN Flood
net.ipv4.tcp_tw_reuse = 1            # TIME_WAIT 复用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535

# 内存优化
vm.swappiness = 10                   # 降低 Swap 倾向
vm.dirty_background_ratio = 5

# 文件描述符
fs.file-max = 65535

/etc/security/limits.conf — 进程限制

* soft nofile 65535
* hard nofile 65535
* soft nproc  65535
* hard nproc  65535

内核参数完整调优方案参见 linux-kernel-tuning-productionlinux-kernel-tuning-guide

监控告警阈值参考

指标 阈值 说明
load average 持续 > CPU 核心数 × 0.8 CPU 资源趋于饱和
内存使用率 > 85%(available 维度) 关注 available 而非 free
磁盘使用率 > 80% 提前清理或扩容
CPU iowait > 20% IO 瓶颈
%util(磁盘) > 80% 设备趋于饱和
SYN_RECV 连接数 突增且 > 5000 疑似 DDoS 攻击

关联链接

关联页面

页面关联点
linux-filesystem-directory-structure-guideLinux FHS 文件系统目录结构详解 — 含各目录用途、运维排查路径速查、磁盘分区方案