[Linux]日志文件已删掉磁盘空间不释放,不重启服务进程的解决方法
问题背景
服务进程启动后,后台会有写日志的操作,当服务进程还没停掉,日志就会一直在写,这时候手动删除日志,会造成日志在linux该目录下已经删除,但是磁盘空间不会被释放掉,因为写日志的进程还在,所以这个磁盘的使用率还是会不断上升,当日志刷新的特别快更新体量特别大的时候,严重的就会造成系统其他服务异常和宕机,这种情况通常重启服务就会解决和释放磁盘空间,但是在真正的生产环境,重启服务是要按严格的时间窗口标准来执行的。为了避免出现磁盘空间不断激增的导致爆满的问题,又不能影响正在运行的服务,本文提供解决方法,在不重启服务进程的时候,释放磁盘空间,同时给出日志清理的时候的操作建议。
问题分析
1、日志文件已删掉但是空间没被释放,原因是后台进程还在运行
ps -ef | grep "进程名"
会看到当前进程还存在。
2、查看文件系统的磁盘使用空间,会发现日志文件所在的磁盘目录的使用率会稳定上升
df -h
证明文件虽然已经删掉,但是后台进程还在不断写日志。
问题解决
1、进入root用户,或者使用root用户的linux窗口
su - root
2、进入linux的进程目录。linux本身是个文件系统,这个目录包含了linux所有的进程的信息,有进程的启动目录,进程操作的软连接等
cd /proc/
3、根据上面ps -ef显示的进程号,进入/proc/进程号/fd 目录
cd /proc/进程号/fd
4、确认已经进入进程的fd目录
pwd
截图如下:
5、该进程的fd目录下会有该进程写日志的软连接,可以查看该软连接的链接名,其中wlproxy是删掉的日志名缩写
ls -al | grep wlproxy
结果如下图,会出现一个包含(deleted)结尾的软连接,意思是这个文件已经删掉了,但是写这个文件的软连接还存在,进程也还存在,此时软连接的名字是799,路径是在/proc/进程号/fd 目录下。
6、这时候如果需要释放磁盘空间,可以选择清空该软连接,因为软连接会定向到这个linux底层的文件
echo "" > 799
如果文件表较大的话稍等片刻,该日志文件就会在不重启的前提下清理干净
7、此时再检查磁盘使用率df -h,就回发现磁盘空间已经降下来,这时候还要检查一下服务是否还在正常运行,因为最初就是为了不影响服务运行才会不重启进行误删后的日志清理操作。
问题复盘和问题避免
之所以要选择复杂的方式清理日志文件,是因为运维人员在清理日志文件的时候直接选择了删除的方式,但是服务进程是一直在线上运行的,这是忽略了根本的可观因素,日志文件等于没有删成功,还占用了大量的磁盘空间。规避这种问题的方法是:清理过期日志时,使用echo “” > xxxx.log的方式清空掉文件,而不是直接rm掉该文件,因为就算多一点文件名在该日志目录也不会有太大问题,但是磁盘空间不会因为日志文件被rm而被释放掉,反而会造成更大的问题
问题延伸
查看更多的这种被删除的空间还没被释放掉的日志文件。也可以用root用户遍历/proc目录,不过root操作需要谨慎,建议所有操作都在测试环境或者测试机器测试验证过没问题后再来执行(以上以下都是)。重定向输出ls -R的查询结果到一个有可观磁盘空间的目录的txt,然后vi编辑txt后查找包含(deleted)结尾的结果,文章来源:https://www.toymoban.com/news/detail-648095.html
ls -R -al /proc > /data/t1.txt
再根据实际情况分析和斟酌需不要清空释放这些被删掉的文件所占用的空间文章来源地址https://www.toymoban.com/news/detail-648095.html
创作不易,且看且珍惜,如果该文章给您带来了帮助,请麻烦您点一下关注,各位看官的支持,是本人持续创作最好最大的动力!
到了这里,关于[Linux]日志文件已删掉磁盘空间不释放,不重启服务进程的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!