在一次下载一个200多G的大文件时,使用如下方式进行下载,已经下载了180G
wget -c xxxxx.tar.gz -O xxxx.tar.gz
因为当时机器上做的操作很多,机器有点卡,于是就手工kill掉这个任务,等空闲时候再手工下载。
结果kill掉这个进程后,很长时间这个任务才终止,且之后/tmp目录被占用的空间就一直没有被释放。
[kxk3admin@kxo-backup-in-02 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 8.9G 9.8G 48% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/mapper/vg01-lv01
296G 225G 56G 81% /tmp
/dev/xvdc1 2.0T 546G 1.3T 30% /app
ossfs 256T 0 256T 0% /oss
由于这台机器上有很多定时自动任务在跑,所以不能随便停或重启这台机器。(当然重启这台机器是可以释放掉tmp被占用的空间)。在不重启的情况下考虑释放掉这些空间。
使用lsof -n | grep deleted查看是否有存在有相关文件被删除,但进程未释放的情况发生
注:这个deleted表示该已经删除了的文件,但是文件句柄未释放,这个命令会把所有持有的未释放文件句柄的进程列出来。
[linux@kxo-backup-in-02 app]$ lsof -n | grep deleted
ossfs 1340 linux 5u REG 253,0 0 18 /tmp/tmpfjJmsrM (deleted)
ossfs 1340 linux 6u REG 253,0 588452596 1920 /tmp/tmpf3llHIV (deleted)
ossfs 1340 linux 7u REG 253,0 236260153501 14 /tmp/tmpfBevUvg (deleted)
ossfs 1340 linux 8u REG 253,0 4291821568 1473 /tmp/tmpflGDQvH (deleted)
ossfs 1340 linux 10u REG 253,0 0 956 /tmp/tmpfLZbTMe (deleted)
ossfs 1340 linux 11u REG 253,0 0 5186 /tmp/tmpfTh5Mov (deleted)
ossfs 1340 linux 13u REG 253,0 0 1247 /tmp/tmpfLVW3zR (deleted)
vim 3793 linux 4u REG 202,33 16384 60555276 /app/temp/.head300.log.swp (deleted)
collect_s 5568 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19204 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19204 linux 255u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19524 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19524 linux 255u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
collect_s 19682 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19900 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 19900 linux 255u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 20090 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
bash 20090 linux 255u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
collect_s 20131 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
collect_s 29077 linux 0u CHR 136,3 0t0 6 /dev/pts/3 (deleted)
然后你可以使用kill命令来释放文件句柄从而释放空间。
从上面看到并未发现有wget相关进程产生的占用空间情况, 而显示为ossfs进程有已经被删除,但仍旧占用空间情况,由于挂载的是oss高速磁盘,所以进程被kill之后貌似没有释放文件句柄,于是采用重新挂载oss的方式来解决。
[linux@kxo-backup-in-02 ~]$ lsof /oss/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysql 18023 linux cwd DIR 0,19 0 1536713 /oss/DONT_TOUCH/ossprd
强制kill掉
[linux@kxo-backup-in-02 ~]$ kill -9 18023
[linux@kxo-backup-in-02 ~]$ lsof /oss/
卸载oss
[linux@kxo-backup-in-02 ~]$ fusermount -u /oss
[linux@kxo-backup-in-02 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 7.1G 12G 38% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/mapper/vg01-lv01
296G 212G 69G 76% /tmp
/dev/xvdc1 2.0T 935G 935G 50% /app
已经卸载
重新挂载
[linux@kxo-backup-in-02 ~]$ ossfs mysqlbak /oss -ourl=http://oss-xx-xxxx-xxxx.xxxxx.com
[linux@kxo-backup-in-02 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 7.1G 12G 38% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/mapper/vg01-lv01
296G 64M 281G 1% /tmp
/dev/xvdc1 2.0T 935G 935G 50% /app
ossfs 256T 0 256T 0% /oss
tmp空间已释放,问题解决。