搬瓦工 VPS 日常运维中总会遇到各种故障:SSH 连不上、网站打不开、磁盘跑满、CPU 负载爆高、服务突然起不来……遇到问题时保持冷静,按照系统化的排查思路逐步缩小范围,往往比盲目重启或重装更高效。本文整理最常见的五类故障及其排查清单。
本文要点
- SSH 连不上:网络、防火墙、SSH 服务、端口四步定位
- 网站打不开:DNS、端口、Web 服务、错误日志逐层排查
- 磁盘空间满:快速定位占用大户并清理
- CPU/内存负载高:找出异常进程并处理
- 服务起不来:systemd 状态与日志读取技巧
故障一:SSH 连不上
SSH 无法连接是最常见也最让人焦虑的故障,按以下顺序排查:
- 确认服务器在运行:登录 KiwiVM 查看电源状态,若显示关机则先开机
- 检查网络连通性:本地执行
ping 服务器IP,若无响应说明网络层有问题 - 确认端口:搬瓦工 VPS 的 SSH 端口可能不是 22,查看 KiwiVM 面板确认实际端口
- 检查防火墙:用 KiwiVM 紧急控制台登录,执行
ufw status确认 SSH 端口放行 - 检查 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,专门用于这类场景。
故障二:网站打不开
- 检查 DNS 解析:
nslookup 你的域名,确认解析到正确 IP - 检查端口:本地
curl -I http://服务器IP,看是否能通 - 检查 Web 服务状态:
systemctl status nginx或systemctl status apache2 - 查看错误日志:
tail -50 /var/log/nginx/error.log - 检查防火墙:确认 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- 用
top或htop找出异常进程的 PID - 执行
ps aux | grep PID确认进程来源 - 判断是否为已知服务(Nginx、MySQL 等)的正常高负载,还是异常进程
- 异常进程可
kill -9 PID终止,之后排查原因 - 若是已知服务高负载,考虑优化配置(如 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 等监控工具定期检查。