【问题标题】:shared memory size beyond sysconfig limit超出 sysconfig 限制的共享内存大小
【发布时间】:2011-09-13 11:02:02
【问题描述】:

是否可以使用 ftruncate 将共享内存块的大小增加到超过 sysconfig 给出的共享内存限制大小?如果物理内存用完,如何让它使用交换?

【问题讨论】:

  • /dev/shm 大小默认为总物理内存的 50%。如果 50% 的限制全部用完,我如何让我在 linux 上的 C 应用程序使用交换空间。默认行为是它给出一个错误“磁盘上没有剩余空间”。

标签: linux ipc shared-memory


【解决方案1】:

可以使用ftruncate来增加共享内存块的大小...

ftruncate() 调整文件大小。它不会调整该文件的内存映射大小。所以,答案是否定的。

...超出 sysconfig 给定的共享内存限制大小?

这个限制不能被打破。 root 用户可以更改该限制。

如果物理内存用完,我如何让它使用交换?

假设 it 是一个内存映射文件,一种方法是一次只映射文件的一部分,而不是整个文件。如果一个进程使用的虚拟内存多于可用的物理内存,操作系统将自动使用交换为您释放一些物理内存。

【讨论】:

  • 感谢您的回答。问题是进程 1 转储的文件需要由进程 2 再次加载。所以即使我映射文件的一部分,我最终还是需要转储整个文件以供后续进程使用它。我需要使用交换。
  • 抱歉,不太明白你的问题。
  • 我需要一个 20 GB 的文件留在共享内存块中,而我的物理 RAM 是 20 GB,但 /dev/shm/ 是 10 GB。我没有root权限。
  • 您可以将文件存储为磁盘文件并将其映射到内存中。您无需将其保留在/dev/shm
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2012-03-29
  • 2016-10-28
相关资源
最近更新 更多