Bash

如何刪除掛載的 tmpfs 目錄使用的共享記憶體?

  • September 29, 2020

我執行了這個命令來創建一個 RAM 磁碟:

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

我也找到了這個解決方案,但我害怕殺死其他程序的數據。沒有更具選擇性的解決方案嗎?

我也找到了這個解決方案,但我害怕殺死其他程序的數據。沒有更具選擇性的解決方案嗎?

echo 3 > /proc/sys/vm/drop_caches不會也不能殺死任何程序或對您的系統造成任何損害 - 它只是從您的記憶體中驅逐所有內容,而不是共享記憶體。ipcs和你的問題也沒有關係。

tmpfs確實佔用了共享記憶體,但解除安裝tmpfs掛載點必須自動釋放您的共享記憶體。為什麼沒有發生在你身上,我不知道。

我相信你/tmp/ramdisk的仍然安裝,但由於某些原因df沒有顯示它。

reboot將解決您的問題。

引用自:https://unix.stackexchange.com/questions/612012