控制 tmpfs 内存使用

gcb*_*gcb 5 memory linux swap tmpfs

有什么方法可以限制 tmpfs 使用的 RAM 量而不限制交换量?

大多数文档都说 tmpfs 的size选项将限制 tmpfs分区的总大小,稍后会说这个空间由 RAM 和 SWAP 使用。然后说默认是你内存的一半,因为如果它用完所有的内存,你会得到 OOM 致命错误。这很混乱。

例如,我希望使用 1/4 的内存但最多使用 3/4 的交换。

gri*_*erz 8

据我所知,您无法控制虚拟内存系统的哪些部分(即 RAM 或交换)用于 tmpfs。

但是,创建大的 tmpfs 会导致 OOM 致命错误是不正确的。您可以创建一个大于总 RAM+SWAP 的 tmpfs,因为在您将文件放入 tmpfs 之前,实际上没有使用它。

当你把文件在tmpfs的,将要使用的内存,但只之多的文件,你投入的tmpfs。如果您长时间不接触这些文件,并且系统需要使用的 RAM 多于将它们保留在缓冲区缓存中的需要,那么这些文件实际上将从交换而不是 RAM 中得到支持。

当您对 tmpfs 的需求成为 RAM 的很大一部分时,它会影响您的缓冲区缓存(因为 tmpfs 文件需要它,所以将停止缓存在 RAM 中)。随着需求的增长,它将开始进入交换。最终,当您没有缓冲区缓存时,您的所有交换都会被使用,并且还会发出更多的内存请求,然后才会开始出现 OOM 错误。

因此/tmp,只要您也有相当数量的交换,指定一个大的 tmpfs 实际上是安全的。你说你可以使用 25% 的 RAM 和 75% 的交换空间。在这种情况下,假设您通常有 1G 的 RAM 和 2G 的交换空间。我将 tmpfs 设置为 1G 并稍微提升交换,比如 3G。

如果您的系统面临内存压力,首先会发生的是不经常使用的文件/tmp将最终由交换而不是 RAM 支持。通过使 tmpfs 与 RAM 大小相同,您不会丢失所有 RAM。