1、背景
系统提示磁盘使用率已经达到85%。排查系统日志查看是否有大文件,将系统日志清理后,发现磁盘使用率恢复到了80%以下,但是磁盘使用率相较其他服务器依然很高,随着日志文件的写入,磁盘空间使用率不断上涨,用不了多久很快就会又达到告警阈值。而排查系统此时已经没有大文件了。磁盘使用率依然这么高肯定服务器有异常情况,最终发现是日志文件已经删除,但实际进程还在占用文件句柄,文件还是打开的空间没有释放。
2、解决
2.1 重启应用
进程重启后才会释放空间。
2.2 清空文件
首先查询哪些文件已删除但是空间没有释放。
lsof |grep -i delete
java 228 admin 1w REG 252,26 19932631136 524295 /export/Logs/globle-1.log (deleted)
java 228 admin 2w REG 252,26 19932631136 524295 /export/Logs/globle-1.log (deleted)
找到打开这个文件的系统fd。
ll /proc/228/fd |grep globle-1.log
l-wx------ 1 admin admin 64 May 21 21:30 1 -> /export/Logs/globle-1.log (deleted)
l-wx------ 1 admin admin 64 May 21 21:30 2 -> /export/Logs/globle-1.log (deleted)
通过fd清空文件,此处的228是进程ID。
echo > /proc/228/fd/1
echo > /proc/228/fd/2
经过以上操作后服务器磁盘空间使用率恢复正常。但是此方式只是清空了文件内容,如果有新的删除操作,会产生新的文件继续占用磁盘空间。解决办法就是重启应用服务。