Debian 服务器性能问题本质上是四类资源瓶颈之一(或组合):CPU、内存、磁盘 I/O、网络,有时还叠加进程/线程争抢、内核调度异常、cgroup 限制误配 等因素。
判断性能问题的核心思路不是“看哪个指标高”,而是“哪个资源先饱和,导致其他资源等待”。
| 资源 | 核心命令 / 工具 | 关键指标与阈值(生产环境常见警戒线) | 含义与典型瓶颈表现 |
|---|---|---|---|
| CPU | top/htop、mpstat 1 5、pidstat | load average > (核心数 × 1.5–2) us+sy > 80% 持续 iowait > 20–30%(注意不是 CPU 问题) | us 高 → 计算密集 sy 高 → 系统调用/锁争抢 iowait 高 → 磁盘瓶颈 |
| 内存 | free -wh、vmstat 1 10、smem | used > 85–90% 且 swap in/out > 0/s si/so > 10–50/s 持续 Available < 10% | 频繁 swap → 严重性能下降 cache 很高但 available 低 → 正常 |
| 磁盘 I/O | iostat -x 1 10、iotop、sar -d | %util > 80–90% 持续 await > 10–20 ms svctm > 5–10 ms r/s + w/s 很高但 util 不高 → 队列长 | 高 util + 高 await → 磁盘饱和 高 r/s 但低 util → 随机小 IO |
| 网络 | iftop、nethogs、ss -s、sar -n DEV | 带宽接近网卡上限 retrans > 1–2% dropped > 0 持续 高 softirq | retrans 高 → 网络拥塞/丢包 softirq 高 → 高网络 PPS |
| 进程/线程 | ps aux --sort=-%cpu、systemd-cgtop | 单进程 CPU > 90–100% 持续 Threads 数异常高 zombie / uninterruptible sleep (D 状态) 多 | D 状态多 → IO 等待 大量线程 → 上下文切换开销大 |
| 系统整体 | systemd-analyze blame、uptime、sar | boot 后 blame 前几项 > 几十秒 高上下文切换(vmstat 的 cs > 几万/s) | 开机慢 vs 运行时慢要分开看 |
# 1. 整体快照(最常用)
uptime && free -wh && df -h /var && iostat -dxm 1 3 | tail -n +3
# 2. CPU + 进程(htop 替代 top 的理由:树状、颜色、鼠标)
htop # 或 top -c -1(显示所有 CPU)
# 3. 磁盘 IO 实时(找出哪个进程在狂写/读)
sudo iotop -o # 只显示有 IO 的进程
# 4. 内存详细(看 swap、cache、可用)
vmstat 1 10
# 5. cgroup 资源消耗(Debian 12+ cgroup v2 必看)
sudo systemd-cgtop # 按 CPU/Memory/IO 排序,看哪个 slice/service 最吃资源
# 6. 历史趋势(需安装 sysstat)
sar -u 1 5 # CPU
sar -r 1 5 # 内存
sar -d 1 5 # 磁盘
sar -n DEV 1 5 # 网络
| 现象描述 | 最可能瓶颈 | 首要确认指标 | 常见元凶(Debian 服务器) | 快速验证/下一步 |
|---|---|---|---|---|
| 响应慢,load 很高,CPU 不高 | 磁盘 I/O | iowait 高、%util 高、await 高 | 日志狂写、数据库 checkpoint、backup rsync | iotop + journalctl --disk-usage |
| 卡顿明显,swap 使用增加 | 内存不足 | si/so >0、available 很低 | 内存泄漏、Java -Xmx 设太大、太多 worker 进程 | smem -t -k、systemd-cgtop |
| CPU 持续 90–100%,响应极慢 | CPU 饱和 | us+sy 高,iowait 低 | 加密、压缩、编译、恶意循环、数据库慢查询 | pidstat -w -u 1 5、perf top |
| 网络请求超时/慢,CPU/内存正常 | 网络 | retrans 高、softirq 高、带宽饱和 | DDoS、网卡驱动 bug、MTU 不匹配、防火墙规则 | tcpdump / ss -m、iftop |
| 某个服务特别慢,其他正常 | 服务内部 / cgroup | systemd-cgtop 该服务很高 | cgroup 限额太严、配置错误、慢查询/锁等待 | journalctl -u 服务名 -f + strace -p PID |
| 开机后很卡,运行一段时间好转 | 启动阶段瓶颈 | systemd-analyze blame 前几项很大 | journald 写爆 /var、大量服务同时启动 | systemd-analyze critical-chain |
基础层(必装):
sudo apt install htop iotop sysstat iftop nethogs btop ncdu
进阶实时监控(强烈推荐):
专业分析层(问题严重时):
“load 高先看 iowait, iowait 高查磁盘忙; 内存紧看 swap 动, swap 动必卡无疑; CPU 满分清 us/sy, sy 高锁/调用忙; 网络慢查 retrans, retrans 高必拥塞。”