曾经在生产上遇到过一个df 和 du出现的结果不一致的问题,为了排查到底是哪个进程占用了文件句柄,导致空间未释放,首先在linux上面,一切皆文件,这个问题可以使用lsof这个BT的命令来处理(这个哈还可以来查询文件句柄泄露问题,应用程序的进程未关闭文件句柄)
1. 文件句柄以及空间释放问题
- 注:在生产环境常见的问题就是,有维护人员或者开发同事使用tail命令实时查看日志。然后另外的人使用rm命令删除,这有就好导致磁盘空间不会真正的释放,因为你要删除的文件,还有进程在使用,文件句柄没有释放,即tail
1.1 模拟场景1
- 创建文件testfile
- touch testfile
- 使用tail -f testfile命令一直查看
- tail -f testfile
- 删除该文件
- rm testfile
1.2 正式使用lsof命令排查
- 如果知道文件名,那就可以直接使用如下命令
- lsof |grep testfile
- 但是如果不知道是哪个文件,或者是很多文件都有这样的情况,需要使用如下命令
- lsof |grep deleted
- 上面命令出来的结果如下:
- root 123 12244 0 14:47 pts/1 01:02:03 tail testfile
- 使用kill 命令来释放文件句柄从而释放空间
- kill 123