Linux日志爆满导致服务异常_磁盘清理方案

6次阅读

日志爆满需先定位再清理并配置轮转:用du、find查大日志,按时间/命名删除或truncate清空,配logrotate每日轮转保留14天,调低日志级别、关闭冗余日志、定期执行清理脚本。

Linux日志爆满导致服务异常_磁盘清理方案

日志爆满是linux服务异常的常见诱因,尤其在长期运行的生产环境中。问题核心不是“能不能删”,而是“删什么、怎么删、删完怎么防”。重点在于快速释放空间的同时,避免误删关键日志或引发服务中断。

? 快速定位日志元凶

别盲目清理,先用命令揪出真正占空间的日志位置:

  • 看整体分布:运行 du -sh /var/log/* | sort -rh | head -10,一眼看出哪个子目录最吃空间(如 /var/log/tomcat/var/log/docker/containers
  • 找单个大文件:执行 find /var/log -type f -name "*.log" -size +100M -ls | sort -k7nr | head -5,直接列出超100MB的日志及其大小
  • 查Docker容器日志:很多爆满其实是json日志撑爆的,运行 du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/NULL | sort -rh | head -3

?️ 安全清理已确认无用的日志

确认某类日志(如旧访问日志、调试日志)已无分析价值后,再执行清理:

  • 按时间删:删除30天前的所有 .log 文件:find /var/log -name "*.log" -mtime +30 -delete
  • 按命名删:比如只留最近7天的nginx日志:find /var/log/nginx -name "access.log.*" -mtime +7 -delete
  • 清空而非删除:对正在被进程写入的日志(如 app.log),用 truncate -s 0 /var/log/app/app.log 更安全,不中断服务

⚙️ 立即启用日志轮转(logrotate)

手动清理只是救急,必须配置自动轮转防止复发。以Tomcat为例,在 /etc/logrotate.d/tomcat 中写入:

/var/log/tomcat/*.log {     daily     rotate 14     compress     missingok     notifempty     create 644 tomcat tomcat     sharedscripts     postrotate         if [ -f /var/run/tomcat.pid ]; then             kill -USR1 `cat /var/run/tomcat.pid` 2>/dev/null || true         fi     endscript }

保存后立即生效:sudo logrotate -f /etc/logrotate.d/tomcat。该配置每天轮转、保留14天、自动压缩、不报错退出。

?️ 长效防护建议

光清日志不够,要从源头控量:

  • 调低应用日志级别:检查 logback.xmlLogging.properties,把 DEBUG 改为 INFOWARN
  • 关闭冗余日志:如Nacos中设 server.tomcat.accesslog.enabled=false;Docker启动时加 --log-driver=local --log-opt max-size=50m --log-opt max-file=3
  • 定期验证清理脚本:把清理命令写成脚本,用 crontab -e 加入 0 2 * * * /usr/local/bin/clean-logs.sh,每天凌晨2点自动执行

text=ZqhQzanResources