服务器磁盘占用持续暴涨,快速定位清理日志垃圾文件


很多站长会遇到这样一个现象:服务器磁盘空间一天天变小,明明网站文件体积并不大,也没有上传大量资源,磁盘使用率却不断飙升,严重时直接磁盘占满,网站抛出500错误、数据库无法写入,站点直接宕机。

img

磁盘爆满不只是删除文件这么简单,如果找不准源头,清理完没过几天磁盘又被占满。本文讲解Linux服务器磁盘暴涨的排查思路,定位日志、缓存、临时文件等垃圾来源,安全清理冗余文件,同时配置规则防止磁盘反复爆满。

一、快速定位磁盘占用高的目录

登录SSH终端,先用基础命令快速定位磁盘占用大户。

bash

df -h
 

该命令查看整体磁盘分区使用率,可以直观看到哪个分区已经接近占满。

进入根目录,查找占用空间最大的文件夹:

bash

du -sh /*
 

执行之后会列出各个一级目录占用大小,重点关注  /var 、 /tmp 、 /home 、 /usr  这几个目录,绝大多数磁盘垃圾都集中在这里。

再针对占用高的目录继续向下排查,例如  /var 目录:

bash

du -sh /var/*
 

层层缩小范围,就能精准找到占用磁盘的目录。

二、磁盘暴涨的几大元凶

  1. 系统与服务日志文件疯狂膨胀

日志是磁盘暴涨最常见的原因。Nginx访问日志、错误日志、MySQL日志、系统syslog,长期不轮转切割,日志文件可以膨胀到几十GB。

尤其是网站遭受爬虫、扫描器、CC探测攻击的时候,大量访问请求会疯狂写入访问日志,短时间日志体积暴增。很多站长从未做日志切割,日志文件越滚越大。

  1. /tmp临时目录堆积垃圾

程序运行产生的临时文件、解压缓存、PHP会话临时文件、上传残留文件全部会存放在 /tmp 。程序异常崩溃的时候,大量临时文件不会自动删除,日积月累堆积大量垃圾。

  1. 数据库产生大量冗余文件

MySQL慢查询日志、二进制binlog日志,如果没有关闭或者设置过期时间,会持续生成日志文件。数据库备份重复存放,旧备份文件没有定时删除,也会吃掉大量磁盘。

  1. 面板缓存、解压残留、旧备份文件

宝塔、1Panel等管理面板,会产生软件缓存、网站备份、打包备份。很多人重复生成备份,旧备份从来不删;解压源码包之后压缩包遗留,日积月累占用大量存储空间。

  1. 文件删除未释放空间

一个很容易忽略的情况:直接rm删除正在被程序占用的日志文件,磁盘空间不会立刻释放。进程还持有文件句柄,即使删除文件,磁盘空间依旧被占用,需要重启对应服务才能释放。

三、安全清理磁盘垃圾实操

注意:不要盲目直接删除系统目录未知文件,避免误删系统关键文件导致服务器崩溃。优先清理日志、临时文件、备份文件。

1. 清理/tmp临时目录
/tmp目录下全部是临时文件,可以安全清理旧文件:

bash

rm -rf /tmp/*
 

2. 清理Nginx过期日志
不要直接rm正在写入的日志文件。正确做法清空日志内容:

bash

/var/log/nginx/access.log
/var/log/nginx/error.log
 

3. 清理无用数据库备份
找到存放备份的目录,删除时间久远、不再需要的旧备份包,保留最近1‑3份备份即可。
4. 查找大文件命令,快速找出GB级别的大文件

bash

find / -type f -size +1G 2>/dev/null
 

这条命令会扫描全盘,找出大于1G的文件,确认是无用日志、旧压缩包后再进行删除。

四、根治方案:避免磁盘反复爆满

清理只是临时解决,如果不做限制,过段时间磁盘又会被占满,需要配置日志轮转。

1.开启logrotate日志切割

Linux自带logrotate工具,用来自动切割、压缩、过期删除Nginx、系统日志。自动分割日志,旧日志压缩归档,保留指定份数,自动删除过期日志,防止单一日志无限膨胀。

简单Nginx日志轮转配置示例:

plaintext

/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
}
 

含义:按天切割,保留7份日志,自动压缩,空日志不处理。

2.关闭不需要的数据库日志

MySQL如果不需要主从同步,可以关闭binlog;慢查询日志按需开启,业务不需要就关闭,减少磁盘输出。

3.备份自动过期策略

使用面板或者脚本做网站备份的时候,增加自动删除旧备份逻辑,不要无限保存备份文件,只保留最近几份。

4.磁盘监控告警

配置磁盘使用率监控,磁盘使用率超过85%触发告警,提前处理,不要等到磁盘100%占满网站宕机才处理。

五、排错小提示

清理磁盘之后空间没释放,大概率是文件被进程占用。
执行命令查看被删除但是还占用空间的文件:

bash

lsof |grep deleted
 

找到对应服务,重启服务即可释放磁盘空间。

总结

服务器磁盘暴涨,不要上来就一通乱删文件。遵循「查看磁盘占用 → 定位大文件 → 安全清理垃圾 → 配置自动轮转防止复现」这套流程。日志文件是头号磁盘杀手,做好日志切割轮转,定期清理临时文件与过期备份,就可以避免绝大多数磁盘爆满导致的网站故障。


手机扫码阅读

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

Nginx静态资源高性能配置,提升网站加载速度

为什么你网站加速后反而更卡?彻底搞懂CDN缓存规则

评 论
更换验证码