搬瓦工 VPS 日常运维中总会遇到各种故障:SSH 连不上、网站打不开、磁盘跑满、CPU 负载爆高、服务突然起不来……遇到问题时保持冷静,按照系统化的排查思路逐步缩小范围,往往比盲目重启或重装更高效。本文整理最常见的五类故障及其排查清单。

本文要点

  • SSH 连不上:网络、防火墙、SSH 服务、端口四步定位
  • 网站打不开:DNS、端口、Web 服务、错误日志逐层排查
  • 磁盘空间满:快速定位占用大户并清理
  • CPU/内存负载高:找出异常进程并处理
  • 服务起不来:systemd 状态与日志读取技巧

故障一:SSH 连不上

SSH 无法连接是最常见也最让人焦虑的故障,按以下顺序排查:

  1. 确认服务器在运行:登录 KiwiVM 查看电源状态,若显示关机则先开机
  2. 检查网络连通性:本地执行 ping 服务器IP,若无响应说明网络层有问题
  3. 确认端口:搬瓦工 VPS 的 SSH 端口可能不是 22,查看 KiwiVM 面板确认实际端口
  4. 检查防火墙:用 KiwiVM 紧急控制台登录,执行 ufw status 确认 SSH 端口放行
  5. 检查 SSH 服务:在紧急控制台执行 systemctl status ssh,若未运行则 systemctl start ssh
# 本地测试端口连通性
nc -zv 服务器IP SSH端口
# 或
telnet 服务器IP SSH端口

# 连接时输出调试信息(定位问题更快)
ssh -vvv root@服务器IP -p SSH端口

KiwiVM 紧急控制台是救援神器

SSH 完全连不上时,用 KiwiVM 的 Emergency Console(紧急控制台)直接进系统,它不依赖 SSH,专门用于这类场景。

故障二:网站打不开

  1. 检查 DNS 解析nslookup 你的域名,确认解析到正确 IP
  2. 检查端口:本地 curl -I http://服务器IP,看是否能通
  3. 检查 Web 服务状态systemctl status nginxsystemctl status apache2
  4. 查看错误日志tail -50 /var/log/nginx/error.log
  5. 检查防火墙:确认 80 和 443 端口已放行
# 快速检查 Web 服务是否监听
ss -tlnp | grep -E ":80|:443"

# 检查 Nginx 配置语法
nginx -t

# 查看最近 100 行错误日志
tail -100 /var/log/nginx/error.log
tail -100 /var/log/apache2/error.log

故障三:磁盘空间满

磁盘满会导致数据库无法写入、日志停止、应用崩溃,需要快速定位并清理:

# 查看磁盘整体使用情况
df -h

# 找出占用最大的目录(从根目录开始)
du -sh /* 2>/dev/null | sort -rh | head -10

# 继续深挖
du -sh /var/* 2>/dev/null | sort -rh | head -10

# 找出单个大文件(大于 100MB)
find / -type f -size +100M 2>/dev/null
常见占用大户查找/清理方式
日志文件/var/log/,可 truncate 清空或配置 logrotate
数据库文件/var/lib/mysql/ 或 /var/lib/postgresql/
软件包缓存apt clean && apt autoremove
Docker 镜像/容器docker system prune -a
/tmp 临时文件rm -rf /tmp/*(确认无运行中任务)

不要随意 rm -rf

清理磁盘时确认每个目录的用途再操作,误删系统文件或数据库文件会造成不可逆损失。不确定的目录先用 ls -lh 查看内容再决定。

故障四:CPU / 内存负载高

# 实时查看进程资源占用(按 CPU 排序)
top
# 或更直观的 htop
apt install -y htop && htop

# 找出 CPU 占用最高的进程
ps aux --sort=-%cpu | head -10

# 找出内存占用最高的进程
ps aux --sort=-%mem | head -10

# 查看系统负载与运行时长
uptime
  1. tophtop 找出异常进程的 PID
  2. 执行 ps aux | grep PID 确认进程来源
  3. 判断是否为已知服务(Nginx、MySQL 等)的正常高负载,还是异常进程
  4. 异常进程可 kill -9 PID 终止,之后排查原因
  5. 若是已知服务高负载,考虑优化配置(如 MySQL slow query log、PHP-FPM worker 数量)

故障五:服务起不来

systemd 管理的服务启动失败时,读日志是最快的定位方式:

# 查看服务详细状态
systemctl status nginx

# 查看 systemd 日志(最近 50 行)
journalctl -u nginx -n 50

# 实时追踪日志(调试时有用)
journalctl -u nginx -f

# 检查端口是否已被占用
ss -tlnp | grep :80

# 检查配置文件语法(以 Nginx 为例)
nginx -t
常见报错关键词含义与解决思路
Permission denied文件权限问题,检查配置文件和目录所有者
Address already in use端口被占用,用 ss -tlnp 找到占用进程
No such file or directory路径配置错误,检查配置文件中的文件路径
syntax error配置语法错误,根据报错行号修正

从日志末尾读起

服务日志通常越新越靠后。用 journalctl -u 服务名 -n 100 看最近 100 行,或 -f 参数实时追踪,比翻全量日志高效得多。

小结

  • SSH 连不上:先看 KiwiVM 确认服务器状态,用紧急控制台进系统救援
  • 网站打不开:DNS → 端口 → Web 服务状态 → 错误日志,逐层排查
  • 磁盘满:du -sh 定位大目录,清理日志缓存而非随意 rm
  • 高负载:top/htop 找进程,区分正常高负载与异常进程
  • 服务起不来:systemctl status + journalctl 读日志,错误信息就在里面

常见问题

服务器完全失去响应怎么办?

登录 KiwiVM 控制面板,点击 Stop 再 Start 强制重启服务器;若仍无法进入,可用紧急控制台检查系统状态,或考虑恢复最近的快照/备份。

系统负载高但找不到异常进程?

可能是 I/O 等待高(iowait),用 iostat -x 1 查看磁盘 I/O;或内核进程占用,用 perf top(需安装 linux-perf)进一步分析。也检查是否有定时任务在此时段运行。

日志文件越来越大怎么处理?

安装并配置 logrotate:它是 Linux 标准日志轮转工具,可按大小或时间自动压缩、归档、删除旧日志。Nginx/Apache/MySQL 安装时通常已自带 logrotate 配置文件。

如何预防磁盘满的情况?

设置磁盘使用告警:当使用率超过 80% 时发送通知。可结合 df -h 和 crontab 写简单脚本,或安装 Netdata/Node Exporter + Prometheus 等监控工具定期检查。