linux - 我可以过度运行 tmpfs 大小吗

标签 linux shared-memory

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

我的问题是,它不应该使用交换空间而不是出错吗?有没有办法让我的应用程序用完比分配给 tmpfs 的更多的东西,也许是通过一个选项?

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

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

最佳答案

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

Mount options for 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 killer )并且整个系统可能会崩溃。

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

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

关于linux - 我可以过度运行 tmpfs 大小吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7242484/

相关文章:

linux - 为什么netstat显示错误的外部地址?

c - sndfile.h中的sf_count_t类型在libsndfile中是怎么定义的?

c - 访问IPC_PRIVATE生成的key_t

python - 检查Numpy数组是否存储在共享内存中

c - Unix信号量问题

linux - 在 SSH 命令中使用 su -c 反引号而不在其中运行命令

linux - freeRTOS 和并行处理

linux-kernel - linux内核如何实现2个进程之间的共享内存

linux - 可以从 Linux 内核模式写入 BIOS 吗?

c - 共享内存程序不同步 - 出现段错误