【问题标题】:can I over run the tmpfs size我可以超过 tmpfs 大小吗
【发布时间】:2011-11-06 17:37:56
【问题描述】:

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

我的问题是,它不应该使用交换空间而不是出错吗?有没有一种方法可以让我的应用程序用完的内存超过分配给 tmpfs 的内存,也许是通过一个选项?

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

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

【问题讨论】:

    标签: linux shared-memory


    【解决方案1】:

    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,您可以添加例如'大小= 40G'。您也可以随时使用以下方法重新安装它:

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

    不过要小心。如果 tmpfs 上的文件占用过多的虚拟内存 (RAM+swap) 应用程序可能会被杀死(被 OOM 杀手杀死)并且整个系统可能会崩溃。

    回到你的问题……

    我认为确定要换出的内容并不容易,因为 Linux 在该级别的 AFAIK 一切(包括进程数据内存、缓存的磁盘文件、映射的磁盘文件、tmpfs 文件)都是相同的“虚拟记忆'。 Linux 可能认为某些页面更重要(最近使用),而其他页面则准备好被换出。所以它可能是 tmpfs 文件的一部分,而其他进程的一部分被换出。

    【讨论】:

    【解决方案2】:

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

    ramfs 也不会交换。

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

    作为当前答案的补充,tmpfs 使用交换,但仅限于其当前大小限制!!!也就是说,如果内存压力很高,一些 tmpfs 挂载将被交换到磁盘上,但这不会允许它超过指定的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 2018-12-04
      • 1970-01-01
      • 2015-09-29
      • 2012-03-05
      • 2020-05-14
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多