根据RHEL文档,系统上可用的共享内存总量等于shmall*PAGE_SIZE
。
我完成RHEL 6的安装后,内核参数的值shmall
默认为4294967296,这意味着系统范围内可以使用的共享内存页面总数为4294967296,页面大小为4096 B。所以,基于根据公式,共享内存的大小为
4294967296*4096/1024/1024/1024/1024 = 16 TB
...这远远大于操作系统的 RAM (8 GB) 大小。操作系统如何找到 16 TB 的共享内存来分配?
那么, 的大小是否/dev/shm
等于共享内存的大小呢?如果不是,我怎样才能得到共享内存的实际大小?
答案1
你的计算是正确的。 shmall 可以设置为高于可用虚拟内存。如果您尝试使用所有这些,那么它不会因为 shmall 超出而失败,而是因为其他原因。
顺便说一句,还有一些命令可以查找这些 IPC 限制:
ipcs -l
lsipc # util-linux>=2.27
请注意,默认情况下,Linux 上的虚拟内存也是无限的,大于 RAM+swap。看
https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
另一方面你可以限制每个进程使用的虚拟内存ulimt -v
都不会影响内核/proc/sys/kernel/shmall
。