如何删除已挂载的 tmpfs 目录使用的共享内存?

如何删除已挂载的 tmpfs 目录使用的共享内存?

我执行了这个命令来创建 RAM-Disk:

mount -t tmpfs -o size=60G tmpfs /tmp/ramdisk

之后,我将几个文件复制到该虚拟文件系统中,如下所示:

cp /mnt/user/hugefile.bin /tmp/ramdisk/hugefile.bin
cp /mnt/user/hugefile2.bin /tmp/ramdisk/hugefile2.bin
cp /mnt/user/hugefile3.bin /tmp/ramdisk/hugefile3.bin

然后,最后一个cp命令冻结,CPU 负载达到最大值。我认为是因为 RAM 磁盘的大小大于可用内存。我用 CTRL+C 打断了它。

一段时间后,我删除了安装的 RAM-Disk,如下所示:

umount /tmp/ramdisk

但这就是我现在的问题,它没有释放共享内存:

free -g
              total        used        free      shared  buff/cache   available
Mem:             62           0           0          53          61           7
Swap:             0           0           0

正如您所看到的,虚拟内存的使用率并不高:

df -BG | grep tmpfs
tmpfs                 1G     1G        1G   1% /run
devtmpfs             32G     0G       32G   0% /dev
tmpfs                32G     0G       32G   0% /dev/shm
tmpfs                 1G     1G        1G   1% /var/log
tmpfs                 4G     0G        4G   0% /tmp/plextranscode

我发现这个提示使用来ipcs分析用法,但结果为空:

ipcs

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

我发现这个解决方案也是如此,但我担心会杀死其他进程的数据。难道就没有更选择性的解决方案吗?

答案1

我也找到了这个解决方案,但我担心会杀死其他进程的数据。难道就没有更选择性的解决方案吗?

echo 3 > /proc/sys/vm/drop_caches不会也不可能杀死任何进程或对您的系统造成任何损害 - 它只是从缓存中逐出所有内容,不是共享内存。ipcs与你的问题也没有关系。

tmpfs确实占用共享内存,但卸载tmpfs挂载点必须自动释放共享内存。为什么你没有遇到这种情况,我不知道。

我相信您/tmp/ramdisk仍然已安装,但由于某些原因df没有显示。

reboot将解决您的问题。

相关内容