Linux内核文档说:
SHMALL:
此参数设置可在系统范围内使用的共享内存页面的总量。 因此,SHMALL至less应该是ceil(shmmax / PAGE_SIZE)。
但是我找不到页面的定义。 就它而言, shmmax定义了共享内存段的最大大小。 所以我不明白这个段落也不是ceil(shmmax/PAGE_SIZE)部分。
(我正在研究这个,以确定如何设置我的服务器postgres。)
页面: 固定长度的连续的虚拟内存块 。
细分:细分是您进入共享内存的界面。 段由一个或多个页面组成。 如果您(或您的stream程)尚未创build段,则说明您没有使用共享内存。
细胞:AKA“天花板”。 一个定义良好的math函数,返回下一个最高的整数(又称四舍五入)。 参见维基百科:地板和天花板function
PAGE_SIZE是操作系统用来分割其“内存块”的字节数。 你可以用getconffind大小:
# getconf PAGE_SIZE PAGE_SIZE 4096
shmmax是任何单个字节的最大大小(不是页面)。
shmall至less需要'cem(shmmax / PAGE_SIZE)',因为如果它less一些,你就不能创build一个大小为shmmax的段。 你会用完页面。
假设系统上共享内存不超过8MiB(以10为基数,MiB – mebibytes以2为基数,计算实际使用的计算大小)。
要find8MiB页面的数量,你只需除以PAGE_SIZE。
8MiB / 4096字节= 2048 。
设置shmall到2048年。
现在让我们假设你知道你只需要一个512K(KiB,不是KB)的postgres。 你有所有的数据来计算你应该设置的最小数量。
ceil(512KiB / 4096字节)= 128
你应该设置的最小的将是128页。 没有什么能阻止你把它设置得更高。 Shmall只是一个限制,指定不pipe共享内存使用的内存量是多less,无论是一个段还是十个。