我可以运行tmpfs大小

时间:2011-08-30 11:33:40

标签: linux shared-memory

我正在尝试使用/ dev / shm tmpfs来编写我的文件。默认值是没有交换的物理RAM的一半。当我写出超出此挂载大小的内容时,会出现错误“磁盘上没有剩余空间”。

我的问题是,它不应该使用交换空间而不是错误输出吗?有没有办法可以让我的应用程序耗尽比为tmpfs分配的更多,可能通过一个选项?

如果我的某个进程正在运行并且几乎占用了/ dev / shm中的所有空间,并且我有另一个正在运行的进程(在/ dev / shm之外),它也会占用超过50%的RAM空间,会发生什么情况?换了哪一个?

例如,假设我的总物理内存为40 GB,tmpfs为20 GB。其中一个进程是使用/ dev / shm,大约是20GB。现在还有另一个进程正在运行,大约需要30GB。换出哪一个进程?或者它无法确定?

2 个答案:

答案 0 :(得分:18)

tmpfs将在必要时使用交换空间(即使tmpfs大小是RAM大小的一半,也可能发生,因为其他东西也使用RAM),“一半的RAM”只是默认大小(相当理智的默认值)的文件系统。您可以使用'size'参数在安装或重新安装时将其设置为您想要的任何内容:

  

挂载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 +交换)应用程序可能会被杀死(通过OOM杀手)并且整个系统可能会崩溃。

回到你的问题......

我认为很难确定将被换出的内容,因为AFAIK在Linux级别上的所有内容(包括进程数据内存,缓存磁盘文件,mmaped磁盘文件,tmpfs文件)都是相同的'虚拟记忆'。 Linux可能会认为某些页面更重要(最近使用过),其他页面可以被替换掉。所以它可能是tmpfs文件的一部分,而另一个进程的一部分被换掉了。

答案 1 :(得分:0)

如果切换到ramfs,它将根据需要动态增长....直到到达OOM。小心!

ramfs也不会交换。

https://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/

作为当前答案的附录,tmpfs 使用swap,但只能使用其当前大小限制!!!也就是说,如果内存压力很高,某些tmpfs安装将被交换到磁盘上,但是这将使其无法超过指定的限制。