VPS性能监控与故障排查实战:CPU、内存、磁盘、网络一次讲清楚


温馨提示:本文为读者投稿的实用技术内容,操作前请先做好数据备份。

VPS 用着用着突然卡了:网站打开慢吞吞、SSH 连不上、数据库偶尔报错……你第一反应是重启、重装,但下次又犯病。真正专业的人会先“看监控、查日志、找原因”,而不是瞎折腾。

这篇文章把 VPS 上最重要的四类资源——CPU、内存、磁盘、网络——的监控方法和排查思路一次讲明白。不管你是运维新手,还是从面板转向命令行的站长,读完后遇到故障都能自己定位个八九不离十。

一、先搭一套基础监控:不观测就谈不上优化

排查的前提是“有数据”。很多问题事发时你没在现场,只能靠历史监控数据复盘。基础方案分成两层:

第一层:操作系统自带的命令

轻量、零安装,随手就能看,适合应急诊断。

第二层:可视化监控平台

如 netdata、Prometheus + Grafana,会自动采集历史数据并画图,适合长期观察趋势、设置告警。

新手优先推荐 netdata:一条命令即可安装,自带非常漂亮的 Web 界面,能实时看到 CPU、内存、磁盘、网络、进程等 200 多项指标,几乎零配置。

二、CPU 排查:看负载,更要看“谁在吃 CPU”

先记住一个核心指标:平均负载 load average。在终端输入 uptime 或 top 能看到:

load average: 1.20, 0.80, 0.60

三个数字分别代表最近 1 分钟、5 分钟、15 分钟的平均负载。判断依据:

- 负载接近你的 CPU 核数:说明 CPU 正好跑满,例如 2 核机器负载到 2.0 左右就满了。

- 1 分钟 > 5 分钟 > 15 分钟:说明负载在上升,可能刚有任务爆发或卡死。

- 长期居高不下:说明有进程持续占用,或配置确实不够。

定位“谁在吃 CPU”,用 top 然后按大写 P 键按 CPU 排序,或直接看 top 里 %CPU 最高的进程。更直观的用 htop(需要先安装):

htop

htop 用颜色区分 CPU 和内存占用,按 F6 选择按 CPU 排序,一下就看清是 PHP-FPM 涨了、是 MySQL 涨了,还是被某个怪进程(比如挖矿木马)霸占。

技巧:如果发现没见过的进程长期占满 CPU,多半是被入侵挖矿了,别犹豫,按之前学的“安全加固”思路处理,同时查一下进程的启动路径和父进程。

三、内存排查:free 和缓存的关系要搞懂

看内存用 free -h:

free -h

输出里的 free 列是真正空闲的内存,但别只看它。Linux 会把空闲内存拿来当“缓存”(buff/cache),用于加速磁盘读写,这是正常且有益的,内存不足时系统会自动回收。

判断内存是否真的紧张,看两个地方:

- swap 是否被频繁使用:free 里的 Swap 如果长期占用且持续增长,说明物理内存不够,发生了换页,会拖慢整体速度。

- 是否有 OOM 发生:很多 512M 小内存机器,进程被内核“杀”掉就是内存不足触发 OOM。查看日志:

    dmesg | grep -i oom
    或 journalctl -k | grep -i oom

如果是 WordPress/MySQL 这类大内存应用爆内存,优先优化应用配置(比如调小 PHP-FPM 的最大进程数、给 MySQL 设置合理的 buffer pool),而不是急着加内存条。

四、磁盘排查:iostat 看 IO,df 看空间

磁盘有两类问题:空间满了、IO 卡了。

看空间,用 df -h:

df -h

当某个分区使用率达到 90% 以上,就该清理日志、缓存或旧备份了;100% 会导致很多程序写不进数据而报错。

看 IO 读写负载,用 iostat(需要安装 sysstat 包):

iostat -x 1

观察 %util 和 await 两列:

- %util 接近 100%:说明磁盘被读写压满。

- await 很大:说明单个 IO 请求等待太久,通常是机械盘或硬盘老化。

如果是 SSD 出现较高 await,先检查有没有程序在持续刷写小文件(比如日志、频繁写操作的数据库),考虑加缓存或用更高 IOPS 的磁盘方案。

五、网络排查:带宽、连接数、占带宽的进程

网络问题显得“玄学”,其实有清晰排查路径。

看整体网速,可以用 iftop(需要安装)实时查看各连接的流量:

iftop

它按连接列出实时上下行速率,能一眼找出是哪个 IP 在狂占带宽。

看连接状态,用 ss(替代老命令 netstat):

ss -ant | awk '{print $1}' | sort | uniq -c

重点看 TIME_WAIT 和 SYN_RECV:

- 大量 TIME_WAIT:通常是短连接过多,可考虑开启 tcp_tw_reuse 或优化应用。一般不用太担心,属正常回收状态。

- 大量 SYN_RECV:可能被 SYN 攻击,或对端不响应。检查防火墙和来源 IP。

别忘了看面板/控制台里的带宽和流量统计:很多“卡网”其实是套餐带宽写满或流量跑超被限速,这是最容易被忽略的原因。

六、常见故障的“一键定位”套路

遇到性能问题,按这套顺序走基本能快速缩小范围:

- 第 1 步 uptime:看负载高不高。

- 第 2 步 top/htop:看是哪个进程占资源。

- 第 3 步 free -h:看内存和 swap。

- 第 4 步 df -h + iostat:看磁盘空间和 IO。

- 第 5 步 ss -ant + iftop:看网络连接和带宽。

- 第 6 步 看系统日志:journalctl -xe 或 /var/log/syslog,很多异常会在日志里写明。

举个例子:网站突然 502。按套路查下来,常见原因有 PHP-FPM 进程全忙或崩掉、后端服务没起来、磁盘或内存被打满。每一步用上面的命令验证,基本一轮就能定位。

七、长期监控与告警:让机器自己“报警”

光靠人肉盯监控不现实。让关键指标超标时自动通知你,才算成体系。以 netdata 为例:

- 内置了 CPU、内存、磁盘、网络等数十项告警规则。

- 支持邮件、Telegram、钉钉、Slack 等通知渠道。

配合 crontab + 简单脚本也能实现“低配版告警”,例如负载超过阈值就发一封邮件:

#!/bin/bash

load=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)

if (( $(echo "$load > 2.0" | bc -l) )); then

    echo "VPS 负载过高:$load" | mail -s "告警:VPS 负载过高" your@email.com

fi

更专业的团队会用 Prometheus 采集 + Grafana 展示 + Alertmanager 告警,能对多个实例统一纳管、支持更多的告警维度。这些都是可选的进阶路线。

八、小结:从“遇到再修”到“提前预防”

性能排查的本质,是把“玄学”变成“科学”。掌握基础命令相当于有了听诊器,配合可视化监控和告警,你就能:

- 故障发生时,几分钟内定位是 CPU、内存、磁盘还是网络的问题。

- 通过历史趋势,提前发现问题,比如磁盘临近爆满、内存持续攀升。

- 把告警设好,机器自己“找你”,而不是你事后去救火。

不用一次学完所有工具,从 htop + free + df 这三个最常用命令上手,遇到卡顿就先跑一遍 uptime、top、free、df、iostat,很多问题当场就能看出眉目。工具是死的,排查思路是活的,练几次就熟了。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

VPS、虚拟主机、独立服务器到底怎么选?三种方案一次看清

VPS数据备份与迁移实战:从定时备份到无痛换机的保姆级教程

评 论