2012-06-12 46 views
1

我有64位Linux機器(Intel Xeon L5410 @ 2.33GHz)。64位Linux機器上最大可能的共享內存大小

**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

+0

你是如何構建二進制文件的?如果你在gdb中加載核心文件並使用「bt」命令獲得回溯,那麼它是什麼意思? – sjr

+0

核心文件向我展示了發生coredump的行。就像我上面告訴過你的錯誤是無法訪問內存地址... – Baplix

+0

那個錯誤對我來說毫無意義。粘貼你得到的回溯有多困難,所以我可以自己閱讀它? – sjr

回答

2

最大shm內存大小可直通/proc/sys/kernel/shmmax,你可以寫成僞文件來改變它。它可能不能超出物理RAM的某些部分(例如一半)。也許一些內核配置可以改變這一點。

您還可以用MAP_SHARED標誌與mmap系統調用共享內存。

+1

我相信你錯過了這個問題的最後一段。 –

+0

不完全。我建議將*寫入'/ proc/sys/kernel/shmmax'(並且OP不會明顯表示這種做法) –

+1

OP已經擁有3GB的SHM。 –