记一次守护日志导致硬盘空间告警问题

记一次守护日志导致硬盘空间告警问题

问题

后台守护进程高频写日志导致硬盘空间频繁报警, 直接删除日志文件硬盘空间依然增长.

初步分析为日志文件当前状态为open状态, 当文件open以后,系统就以inode号码来识别这个文件,不再考虑文件名.删除一个已open日志文件, 只是影响到文件系统中inode引用链接数, 并未影响进程已打开文件inode文件数据block, 写操作依然有效, 导致硬盘空间不断增长.

解决方法1

通过proc文件系统( /proc/pid/fd ) 获取进程运行中文件句柄链接进而获取实际关联的文件名称, 并强制使用 ‘> fd’ 清空日志.

pidof xxx
ls -l /proc/pid/fd/
lrwx------    1 root     root            64 May 24 10:39 0 -> /tmp/2018-04-19_205225.log (deleted)
lrwx------    1 root     root            64 May 24 10:39 1 -> /tmp/2018-04-19_205225.log (deleted)
lrwx------    1 root     root            64 May 24 10:39 2 -> /tmp/2018-04-19_205225.log (deleted)
...
(deleted) 标识日志文件已删除

> 2
强制清空日志

解决方法2

重定向当前进程日志文件句柄到 /dev/null. 这里需要一个工具reredirect, 可以将运行中进程文件句柄直接重定向到指定文件或者文件句柄. 其实现原理为通过 ptrace attach 到运行中进程, 调用 syscall dup dup2 重定向指定文件句柄即可.

reredirect -N -m /dev/null pid 

-N 不恢复原来文件句柄.

猜你喜欢

转载自blog.csdn.net/force_eagle/article/details/80431306