2011-08-30 60 views
8

我正在嘗試使用/ dev/shm tmpfs來編寫我的文件。缺省值是沒有交換的物理RAM的一半。當我寫入超出此掛載大小的內容時,會發出錯誤「磁盤上沒有剩餘空間」。可以通過運行tmpfs的大小

我的問題是,它不應該使用交換空間而不是錯誤?有沒有辦法讓我的應用程序使用比爲tmpfs分配的內容更多,也許通過一個選項?

如果我的一個進程正在運行並且已經用完了/ dev/shm中幾乎所有的空間,並且另一個進程正在運行(/ dev/shm之外),該進程也使用超過50%的RAM空間?哪一個被換出?

例如,假設我的總物理內存爲40 GB,tmpfs爲20 GB。其中一個進程使用/ dev/shm,大約20GB。現在還有另一個運行大約30GB的進程。哪一個流程會換出?或者它不能確定?

回答

17

當需要時tmpfs將使用交換空間(即使tmpfs的大小是RAM大小的一半,也可能發生,因爲其他的東西也會使用RAM),'RAM的一半'只是默認大小(相當理智的默認大小)的文件系統。你可以將它設置爲任何你想要的,而安裝或使用「大小」的說法重新安裝它:

爲tmpfs的

size=nbytes 

    Override default maximum size of the filesystem. The size is 
    given in bytes, and rounded up to entire pages. The default is 
    half of the memory. The size parameter also accepts a suffix % 
    to limit this tmpfs instance to that percentage of your physical 
    RAM: the default, when neither size nor nr_blocks is specified, 
    is size=50% 

如果您的版本fstab掛接您可以將掛載tmpfs選項添加例如'size = 40G'那裏。您也可以隨時使用它重新安裝它:

mount -o remount,size=40G /dev/shm 

但要小心。如果tmpfs上的文件佔用了太多的虛擬內存(RAM + swap),則應用程序可能會被殺死(OOM殺手),整個系統可能會崩潰。

回到你的問題......

我不認爲這是容易確定哪些會在該水平Linux的一切(包括處理數據存儲,緩存的磁盤文件,mmaped磁盤文件被換出,因爲據我所知,tmpfs文件)與「虛擬內存」相同。 Linux可能會考慮一些更重要的頁面(最近使用過),其他可以被換出。所以它可能是tmpfs文件的一部分,而其他進程的一部分被換出。

+0

我想添加http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/給你的評論:) – Quamis

相關問題