我正在尝试使用/dev/shm tmpfs编写文件。默认值为物理RAM的一半而不交换。当我写一些超出此安装大小的文件时,会出现错误“磁盘上没有剩余空间”。
我的问题是,它不应该使用交换空间而不是出错吗?有没有一种方法可以让我的应用程序用完比分配给tmpfs的东西更多的东西,也许可以通过一个选项呢?
如果我的一个进程正在运行并且用完了/dev/shm中的几乎所有空间,而我又运行了另一个进程(在/dev/shm之外),该进程也使用了超过50%的RAM空间,将会发生什么情况?换出哪一个?
例如,假设我的总物理内存为40 GB,tmpfs为20GB。其中一个进程正在使用/dev/shm,大约20GB。现在,正在运行另一个进程,该进程大约需要30GB。哪个过程将换出?还是无法确定?
最佳答案
tmpfs会在必要时使用交换空间(即使tmpfs的大小是RAM大小的一半,它也会发生,因为其他东西也使用RAM),并且“一半的RAM”只是文件系统的默认大小(相当合理) 。您可以使用'size'参数在安装或重新安装它时将其设置为所需的任何值:
如果您的发行版使用fstab挂载tmpfs,则可以添加例如那里是“大小= 40G”。您还可以随时使用以下方法重新挂载它:
mount -o remount,size=40G /dev/shm
不过要小心。如果tmpfs上的文件占用了过多的虚拟内存(RAM + swap),则应用程序可能会被杀死(再见,OOM杀手),并且整个系统可能会崩溃。
回到您的问题…
我认为要确定要交换的内容并不容易,因为针对Linux的AFAIK在该级别上的所有内容(包括进程数据内存,缓存的磁盘文件,mmaped磁盘文件,tmpfs文件)都是相同的“虚拟内存”。 Linux可能会认为某些页面更重要(最近使用过),而其他页面则准备好换出。因此,它可能是tmpfs文件的一部分,而另一进程的一部分被换出了。
关于linux - 我可以超出tmpfs的大小吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7242484/