超出 sysconfig 限制的共享内存大小

Posted

技术标签:

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

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

【问题讨论】:

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

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

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

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

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

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

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

【讨论】:

感谢您的回答。问题是进程 1 转储的文件需要由进程 2 再次加载。所以即使我映射文件的一部分,我最终还是需要转储整个文件以供后续进程使用它。我需要使用交换。 抱歉,不太明白你的问题。 我需要一个 20 GB 的文件留在共享内存块中,而我的物理 RAM 是 20 GB,但 /dev/shm/ 是 10 GB。我没有root权限。 您可以将文件存储为磁盘文件并将其映射到内存中。您无需将其保留在/dev/shm

以上是关于超出 sysconfig 限制的共享内存大小的主要内容,如果未能解决你的问题,请参考以下文章

在 Clickhouse 中运行非常简单的查询时超出内存限制

是否有任何有效的方法可以以最新的一阶对给定的 mongodb 数据进行分页并避免排序超出大数据的内存限制?

容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存

redis缓存淘汰策略

将大型数据集缓存到 spark 内存中时“超出 GC 开销限制”(通过 sparklyr 和 RStudio)

如何制作具有特定数组大小的共享内存?