服务器变慢:从哪里开始
五分钟诊断流程:CPU、内存、磁盘、网络——如何用几条命令找出瓶颈究竟在哪里,以及接下来该做什么。
更新于 2026年8月23日
“一切都很慢”不是诊断结论。瓶颈只有四个:CPU、内存、磁盘和网络。下面是一套检查顺序,五分钟内就能定位到其中之一。
第 1 步:整体情况
uptime
free -h
df -h
三条命令就能排除一半的可能。如果平均负载明显高于您套餐的核数,说明存在排队——参见平均负载。available 接近零意味着内存不足。如果分区已 100% 占满,不用再往下查——请阅读磁盘空间不足。
第 2 步:瓶颈究竟是什么
vmstat 2 5
看平均值那几列,即除第一行以外的所有行:
us和sy偏高、r较大——受 CPU 限制;wa偏高、b较大——受磁盘限制;si和so不为零——正在发生交换,说明内存即将耗尽;st偏高——这是虚拟机管理程序占用的时间,属于外部原因,请联系支持。
第 3 步:找出元凶
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
iotop -boPan 3 | head -20 # apt install iotop
ss -tn state established | wc -l
实时画面在 htop 或 btop 中更容易看懂。留意处于 D 状态的进程——它们在等待磁盘,并推高负载。
如果元凶是您的应用程序,下一个问题就与它有关:数据库查询缓慢、缺少索引、工作进程过多、某次部署后出现死循环。把变慢开始的时刻与日志对应起来:
journalctl --since "1 hour ago" -p warning
第 4 步:查看历史记录
在控制面板 /hosting/vds/m/<id> 中打开“概览”,查看最近一天和一周的图表。三种典型形态:
- 在某个时刻突然抬升——有东西变了:一次部署、一次更新、一个新的定时任务;
- 按计划规律出现峰值——某个后台任务;把它挪到夜间,或用
nice和ionice限制它; - 连续数周保持平坦的高位——您只是单纯超出了当前套餐的能力。
发现结果后该怎么办
| 瓶颈 | 快速处理 | 长期方案 |
|---|---|---|
| CPU | 找到并停止多余的进程 | 升级到核数更多的套餐 |
| 内存 | 限制工作进程和数据库缓冲区,增加 swap | 升级到内存更大的套餐 |
| 磁盘 | 用 ionice 限制备份,精简日志 | 升级到更高套餐:上限随核数增长 |
| 网络 | 用 --bwlimit 限制后台下载 | 排查流量来源 |
磁盘上限的计算方式如下:每核 60 MB/s 写入,不低于 60,不高于 400,读取速度是写入的两倍。如果您持续处于上限,不升级套餐磁盘就不会更快——参见基准测试。
常见错误
- 立刻重启机器。 重启会抹掉现场,一小时后一切又会重演。先收集数据。
- 只信一帧画面。 刚启动 htop 那一刻的尖峰说明不了什么——观察一分钟。
- 把内存占满当成问题。 要看
available和 swap,而不是free。 - 没弄清楚原因就更换套餐。 内存泄漏或死循环脚本会跟着您一起搬到新套餐。降级回退是不支持的。
如果 CPU、内存和磁盘都很平静,但应用程序很慢,那么瓶颈在机器之外:外部 API 缓慢、DNS,或客户端网络。用
curl -w '%{time_total}\n' -o /dev/null -s测试您需要的地址。