解决无法释放句柄问题概要
df -h
查看空间情况
du -sch *
查看空间文件目录占用情况
lsof |grep deleted
查看未释放句柄的文件
ps -axuf |grep <PID>
根据lsof出来的PID执行,PID一般是第二列的数字
kill -9 <PID>
杀死未释放空间的进程,这个谨慎执行,有重启命令执行重启命令,没有重启命令,kill掉服务后要拉起来,避免影响业务。kill之中不知道怎么重启的,买好车票。
某天钉钉监控收到某个磁盘空间告警
image.png
登录机器上,df -h
看到某个目录占用达到了96%
进入这个目录里面,执行 du -sch *
,查看目录内的文件大小,但整个目录占用只有 58G,跟上面的380G差异较大,
这时候想到了,可能是因为这个目录有文件句柄没有释放导致的,所以执行 lsof |grep deleted
查看是否有未有释放的句柄
可以看到 /xxx-git 目录下有4个文件显示是 deleted 的,说明该文件已经删除了,但句柄没有释放,导致一直在占用这空间,可以直接kill 这个进程进行空间释放
lsof |head -1
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
————————————————
执行 ps -axuf |grep PID
, PID为上图对应的进程ID,可以看出是由于下面这两个服务导致,对这两个服务进程重启即可释放空间
root@zhc-netmis-jenkins-ftp-pro-2:/tmp# ps -axuf |grep 340253
root 467520 0.0 0.0 14700 1016 pts/0 S+ 14:39 0:00 \_ grep --color=auto 340253
root 340253 0.3 0.0 9184 2412 ? S 2020 1478:17 inotifywait -mrq -e modify,delete,create,attrib /abcd-git/product_lib/
root@xxxxxx-ftp-pro-2:/tmp# ps -axuf |grep 348280
root 340280 46.0 0.1 46892 8280 ? R 2020 171480:34 perl /usr/bin/parallel -j 1 /bin/bash ./commond.txt
image.png
网友评论