linux - 64 位 Linux 机器中可能的最大共享内存大小

标签 linux 64-bit shared-memory

我有 64 位 Linux 机器(Intel Xeon L5410 @ 2.33GHz)。

**meminfo:**
MemTotal:     24672736 kB 
MemFree:        145372 kB 
Buffers:        181896 kB 
Cached:       22004648 kB 
SwapCached:     195072 kB 
Active:        9761028 kB 
Inactive:     13964532 kB 
HighTotal:           0 kB 
HighFree:            0 kB 
LowTotal:     24672736 kB 
LowFree:        145372 kB 
SwapTotal:    17414452 kB 
SwapFree:     15618852 kB 
Dirty:         2125148 kB 
Writeback:           0 kB 
AnonPages:     1358396 kB 
Mapped:        1069632 kB 
Slab:           699464 kB 
CommitLimit:  29750820 kB 
Committed_AS:  9236252 kB 
PageTables:      38620 kB 
VmallocTotal: 34359738367 kB 
VmallocUsed:     17272 kB 
VmallocChunk: 34359718843 kB 
HugePages_Total:     0 
HugePages_Free:      0 
HugePages_Rsvd:      0 
Hugepagesize:     2048 kB 

**Also the shm details are:**
shmall                2097152 
shmmax                3294967296 
shmmni                4096 

我尝试创建 2 GB 以上的共享内存,shmget 成功,但后来发生核心转储,并出现无法访问内存的错误。 而低于 2GB 的共享内存则完全可以正常工作。 我能够找到任何有效的原因,因为我的 shmmax 值约为 3GB

最佳答案

最大shm内存大小可通过/proc/sys/kernel/shmmax获得,您可以写入该伪文件来更改它。它可能无法高于物理 RAM 的某些部分(例如一半)。也许某些内核配置可以改变这一点。

您还可以与 mmap 共享内存带有 MAP_SHARED 标志的系统调用。

关于linux - 64 位 Linux 机器中可能的最大共享内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991111/

相关文章:

unix - 操作系统中的共享内存段

c++ - 错误 : cannot call constructor

java - 透明背景 JFrame Linux 上的动画

c++ - 非常大的枚举器(> 64 位类型)

c++ - 如何使用注册表中的 CurrentVersion\Run 键为特定用户自动启动程序?

c - 以通用方式安全地初始化 C 中的数组

linux - 基于字段子集统一分隔文件

Linux - 按日期字段排序文件

Python Ray 似乎会为每个远程函数调用复制对象

swift4 - 同时访问<地址>,但修改需要独占访问