VPS用着用着突然变卡,网站打开要好几秒、SSH敲命令有明显延迟——这种情况比完全断连更难排查。不是挂了,是慢了。本文用四个命令分别定位CPU、内存、磁盘IO和网络的瓶颈,告诉你性能卡在哪个环节。
排查前的第一步:确认不是自己的网络问题
很多”VPS变慢”其实是本地网络到机房的线路波动。在动手排查之前,先换个网络环境(比如手机热点)ping一下服务器,排除自己这一端的问题。如果不同网络都慢,才往下看。
CPU排查:top和htop看谁在吃算力
SSH连上服务器后先跑 top,按1键展开所有CPU核心。关注三行关键数据:
top
# 按1显示每个核心的负载
# 关注这三行:
# load average: 0.15, 0.10, 0.05 — 1/5/15分钟平均负载
# %Cpu(s): 2.3 us, 0.7 sy, 0.0 ni, 96.8 id — 注意idle值
# 然后按P按CPU占用排序进程判断标准:单核VPS的load average持续超过1.0、idle持续低于20%,说明CPU在满负荷跑。如果MySQL或PHP-FPM进程长期占在CPU排行榜第一行,就是应用层的问题——查慢查询日志或者PHP报错日志。
如果htop看到大量D状态(不可中断睡眠)的进程,说明问题不在CPU而是磁盘IO阻塞了进程,跳到第三节。
内存排查:free看真实可用内存
Linux的内存使用情况看free命令比看top更准确:
free -h
# 关键看 available 这一列,不是 free
# free小但available大=正常,Linux把空闲内存用做文件缓存了
# available也接近0=内存真的不够了如果available持续低于200MB,系统在频繁做SWAP交换——内存不够了,把数据写到磁盘上的swap分区。SWAP的读写速度比内存慢几十倍,这就是为什么内存不够时整个服务器都像卡死了一样。
排查谁在吃内存:
ps aux --sort=-%mem | head -10
# 按内存占用排序,看前10名常见的吃内存大户:MySQL的InnoDB缓冲池(调小innodb_buffer_pool_size)、Redis(设置maxmemory)、PHP-FPM的进程数(调pm.max_children)。
磁盘IO排查:iostat找到读写瓶颈
磁盘慢是很多VPS性能问题的根因,但容易被忽略。先装工具:
apt install sysstat -y
# 然后运行
iostat -x 1 5
# 每秒输出一次,共5次重点看 %util 和 await 两列。%util接近100%说明磁盘忙不过来了。await是单次IO的平均等待时间——HDD正常在10-20ms,SATA SSD在1-5ms,NVMe在0.1-0.5ms。如果你的VPS用的是SSD但 await 显示80ms以上,很可能是同一台物理机上其他VPS在和你抢磁盘,这种情况只能换服务商。
看看具体是哪个进程在刷磁盘:
iotop -o
# 只看有IO活动的进程常见磁盘杀手:MySQL的binlog写入、网站访问日志(关闭或调低nginx的access_log级别)、备份任务定时跑了。
网络排查:ping/mtr定位延迟来源
VPS的”慢”如果是网络延迟导致的,查法不一样。先从简单开始:
# 从服务器往国内测
ping -c 10 114.114.114.114
# 延迟>200ms、丢包>5%就需要关注
# 更详细的路径分析用mtr
mtr -r -c 50 114.114.114.114
# 看每一跳的丢包率和延迟mtr的价值在于能看到延迟卡在哪一跳。如果丢包从中间某跳开始一路到底,问题在骨干网路由(你基本控制不了,只能等恢复或者换机房位置)。如果只在最后一跳丢包,可能是你本地网络问题。
另外检查带宽使用情况:
nload
# 实时看入/出流量
# 如果出向带宽长期跑满,检查是否被攻击或者有大文件下载任务性能问题总结对照表
| 症状 | 最可能原因 | 先跑的命令 |
|---|---|---|
| SSH敲命令卡、网页响应慢但能打开 | CPU满载或SWAP交换 | top; free -h |
| 网站偶尔完全打不开、刷新几次又好了 | 内存不足导致进程被杀 | dmesg | grep -i kill |
| 数据库查询慢、数据写入慢 | 磁盘IO瓶颈 | iostat -x 1 5 |
| 速度时快时慢、不稳定 | 线路波动或带宽被占 | mtr; nload |
日常做好三件事避免性能问题
- 装监控:配一个轻量的监控脚本或工具(比如Netdata),CPU、内存、磁盘、带宽四个维度的历史曲线比事后再查日志有用得多。
- 设告警:内存使用超过80%、CPU持续高负载就自动通知你,不要等问题严重了才发现。
- 定期看dmesg:dmesg -T | tail -50 翻一下最近的内核日志,OOM killer杀了什么进程、磁盘有没有坏块、网卡有没有异常——这些信息在dmesg里都有。
常见问题
VPS配置不差为什么还是卡?
VPS是共享物理机的,你的2核4G写在账单上,但如果同物理机上其他VPS在疯狂吃资源,你的性能照样受影响。这是VPS的固有问题,想彻底解决只能用独立服务器或KVM构架的VPS(相比OpenVZ资源隔离更好)。雨云的KVM云服务器资源隔离更彻底,优惠码admin01首月五折。
top看到的load average怎么看?
load average是处于运行和等待状态的进程数,不是CPU使用率。单核VPS上load持续大于1说明有进程在排队等CPU;大于2说明已经明显卡了。多核VPS的load阈值等于核心数——4核VPS的load超过4才算有压力。
VPS经常被OOM Killer杀进程怎么解决?
OOM Killer是Linux内存不够时的自救机制,会杀掉内存占用最大的进程。治本的方法是加内存或者调小应用的内存占用(MySQL调小buffer_pool、PHP-FPM减少max_children)。临时方案是加swap,但swap只是延缓不解决问题。






