首页/系统/信创系统运维速查/日志暴涨的定位与处置
常见问题65 条

日志暴涨的定位与处置

/var/log 增长过快完定位源头:按目录排序与大文件筛选,lsof 看谁在写;再从日志级别与轮转策略两个方向处理。

信创系统运维速查系统更新于 2026-10-13

日志暴涨要先定位源头

日志目录增长过快通常不是均匀的,而是某个目录或某个文件在短时间内撑大。先按目录聚合大小排序,再筛出大文件,然后用文件句柄查询确认是哪个进程在持续写入。定位到源头之后,处理方式取决于它是系统日志还是应用日志。

删除不等于释放

一个普遍误解是删掉大日志文件就能腾出空间。如果文件仍被进程以句柄打开,直接删除只会让目录项消失,磁盘占用保持不变,直到进程关闭句柄或重启。正确做法是用日志轮转把文件切走并让服务重新打开新文件,紧急情况下用截断方式把文件内容清空。

基本信息

系统日志rsyslog 管理的目录加 systemd 日志
轮转工具logrotate,支持演练模式先看计划
句柄查询lsof 查看哪个进程在写某个文件
systemd 日志journalctl 自带空间统计与收缩命令

典型使用场景

  • 监控告警提示日志分区使用率快速上升
  • 应用报错后频繁重试,日志量在几分钟内翻倍
  • 巡检发现轮转产物堆积,历史日志没有按时清理
  • 磁盘写满导致业务异常,需要紧急腾出空间
  • 梳理日志保留策略,区分必须留存的审计日志与可丢弃的调试日志

定位

定位
du -x -h --max-depth=2 /var/log | sort -h | tail -15     # 按目录排序找大头
find /var/log -type f -size +200M -exec ls -lh {} + | head
journalctl --disk-usage                                  # systemd 日志占用
lsof /var/log/messages 2>/dev/null | head                 # 谁在持续写这个文件
ls -lh /proc/<PID>/fd | grep -i log | head                # 从进程侧反查打开的日志

处理

处理
logrotate -d /etc/logrotate.conf | head -40    # 演练模式,先看轮转计划
logrotate -f /etc/logrotate.d/rsyslog         # 应急强制切割指定配置
journalctl --vacuum-size=500M                 # 收缩 systemd 日志占用
# 应用日志:调高日志级别、按大小切割、归档到数据盘

处理方式对照

方式适用场景注意点
日志轮转常规治理,首选确认服务支持重新打开文件
强制切割应急腾空间切割后复核轮转配置是否真正生效
内容截断文件被占用且不能中断服务仅清空内容,需评估审计留存要求
收缩 systemd 日志系统日志占用大不要手工删除日志目录
直接删除不推荐句柄仍打开时空间不会释放
直接删除正在写入的日志文件通常不会释放空间,因为进程句柄仍然有效。优先用日志轮转处理,应急截断前确认该日志是否属于必须留存的审计范围。

易错点

  • 删掉正在写入的日志文件却发现空间没变,误以为删除失败,实际是句柄仍被占用
  • 强切日志只是临时手段,轮转配置本身的问题不修复,过几天会再次撑满
  • 为省空间把审计类日志一并清掉,事后核查与审计取证没有依据
  • 只清理不定位源头,应用日志级别配置错误导致的问题仍然持续产生海量日志

数据来源与参考

  • man 8 logrotate
  • man 1 lsof
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌