曾经在生产上遇到过一个df 和 du出现的结果不一致的问题,为了排查到底是哪个进程占用了文件句柄,导致空间未释放,首先在linux上面,一切皆文件,这个问题可以使用lsof这个BT的命令来处理(这个哈还可以来查询文件句柄泄露问题,应用程序的进程未关闭文件句柄)
1.文件句柄以及空间释放问题
注:在生产环境常见的问题就是,有维护人员或者开发同事使用tail命令实时查看日志。然后另外的人使用rm命令删除,这有就好导致磁盘空间不会真正的释放,因为你要删除的文件,还有进程在使用,文件句柄没有释放,即tail
模拟场景1:
你创建一个文件testfile
全选复制放进笔记
touch testfile
然后使用tail命令一直查看
全选复制放进笔记
tail testfile
这个时候另外一个同事使用rm命令来删除了该文件
全选复制放进笔记
rm testfile
正式使用lsof命令排查
如果你知道文件名,那就可以直接使用如下命令
全选复制放进笔记
lsof |grep testfile
但是如果你不知道是哪个文件,或者是很多文件都有这样的情况,那你需要使用如下命令
全选复制放进笔记
lsof |grep deleted 注:这个deleted表示该已经删除了的文件,但是文件句柄未释放,这个命令会把所有的未释放文件句柄的进程列出来
注:有些系统你没有配置环境变量的话,直接lsof是会报错没有该命令,你可以直接/usr/bin/lsof 或者是/usr