服务器报警磁盘使用率 100%,网站写日志失败,MySQL 也起不来。记录一下定位过程。
第一步:df 看哪个分区满了
df -h
# Filesystem Size Used Avail Use% Mounted on
# /dev/vda1 40G 40G 0 100% /
根分区满了。注意 /dev/vda1,别去看 tmpfs 那些。
第二步:du 逐层找大目录
du -h --max-depth=1 / | sort -hr | head -20
从根开始,一层层往下:
du -h --max-depth=1 /var | sort -hr | head
du -h --max-depth=1 /var/log | sort -hr | head
最后发现 /var/log/mysql/error.log 有 20 多个 G。原因是 MySQL 报错一直刷,日志没轮转。
第三步:处理
# 清空日志(别直接 rm,进程还在写会占着 inode)
> /var/log/mysql/error.log
# 或者用 truncate
truncate -s 0 /var/log/mysql/error.log
如果 df 和 du 结果对不上
常见原因是有进程删了文件但没释放句柄:
lsof | grep deleted
# 找到对应进程,重启或 kill 掉,空间才会释放
预防
- 配 logrotate,按天/大小轮转,保留 7~30 天
- 监控磁盘使用率,80% 就报警
- 日志目录单独分区,别和系统盘混用
- 临时文件目录定期清理

Comments 2 条评论
df 和 du 对不上就是句柄没释放
先看是不是 tmpfs 这个细节好