前言:突发“404”的惊魂时刻

昨天正准备更新一篇新文章,打开博客却赫然发现页面一直在转圈,最后甚至直接报错。第一反应是:难道被DDoS了?还是VPS突然抽风?

作为一名爱折腾的博主,遇到这种突发断服的情况确实让人头大。 SSH连上去一查,罪魁祸首竟然是最不起眼的原因——磁盘空间被写满了

今天就以此为例,复盘一下这次Ghost博客宕机的排查过程,聊聊如何避免这种低级错误导致的“事故”。

故障现场:Ghost为何如此脆弱?

Ghost是基于Node.js的博客系统,虽然轻量高效,但它对运行环境的要求其实并不低。当磁盘利用率达到100%时,不仅仅是图片传不上去那么简单,Node.js进程在尝试写入日志文件、Session数据或生成临时缓存时,若磁盘无响应或写入失败,进程往往会直接崩溃或陷入死循环。

浏览器显示 502 Bad Gateway 错误页面

Web服务崩溃时常见的 502 Bad Gateway 错误提示

这次故障的症状很典型:

  1. 前端页面无法打开:浏览器一直在加载,最终返回502或504错误。
  2. 后台进不去:管理页面同样挂掉。
  3. 服务进程异常:检查进程发现Ghost相关的Node进程已经停止运行。

排查思路:一步步揪出元凶

既然服务停了,我们首先要做的不是重启,而是找原因。盲目重启只会让服务在几秒后再次挂掉。

1. 检查磁盘使用率

Linux终端执行 df -h 命令显示磁盘使用率100%

使用 df -h 命令检查磁盘空间,发现根目录已满

登录服务器后,第一时间执行老三样命令:

df -h
``

结果惊人,根目录(/)显示 Use% 100%。哪怕是日志狂涨,也很少在短时间内把磁盘撑爆。这时候需要进一步看是哪个目录在作妖。

### 2. 定位大文件与大目录

使用 `du` 命令逐层排查:

```bash
du -h --max-depth=1 /
``

经过一番筛选,最终发现 `/var/lib/mysql` 或者 `/var/log` 占用了大量空间。在Ghost的环境下,常见的情况有几种:

*   **Nginx访问日志爆炸**:如果网站流量较大,且没有做日志轮转,access.log几个月就能吃掉几个G。
*   **Ghost系统日志**:Ghost本身的日志文件如果不限制大小,也会无限增长。
*   **数据库膨胀**:一些未清理的损坏事务日志或备份文件。

## 解决方案:清理与恢复

找到了原因,解决办法就很明确了。

### 快速清理(救火)

为了快速恢复服务,可以先清理一些非核心的大文件,比如压缩或删除老旧的Nginx日志:

```bash
# 清空nginx日志(慎用,确保不需要后再操作)
echo > /var/log/nginx/access.log
``

或者直接扩容磁盘(如果你的云平台支持在线扩容)。**注意:清理文件后,一定要记得重启Ghost服务:**

```bash
ghost restart

长期规避(防火)

光救火不够,还得建立防火机制。

1. 配置日志轮转

不要让日志无限增长。配置 logrotate 来自动切分和压缩日志。

编辑 /etc/logrotate.d/nginx(以nginx为例):

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

这样系统会自动保留最近14天的日志,旧的会被压缩。

2. 设置磁盘监控告警

这是最重要的一点。不要等磁盘满宕机了才发现。可以通过编写简单的脚本结合Crontab,或者使用现成的监控工具(如Uptime Kuma、Server酱等),当磁盘使用率超过85%时,立刻发送Telegram或微信通知给自己。

简单的Shell脚本示例:

#!/bin/bash
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt 85 ]; then
    echo "警告:磁盘使用率超过85%!当前:${USAGE}%" | mail -s "服务器警报" [email protected]
fi

总结

Ghost博客本身很稳定,但“环境”往往才是拖后腿的那一个。磁盘满导致的宕机虽然原理简单,但杀伤力极大,且往往发生在你最忙碌的时候。

定期检查日志、设置自动轮转、部署监控告警,做好这三点,基本上就能告别这种低级运维事故了。希望我的这次踩坑经历能给你提个醒!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭