linux共享内存最大值,linux下更改共享内存的最大值[转]

  • Post author:
  • Post category:linux


System V IPC 参数名字描述合理取值SHMMAX最大共享内存段尺寸(字节)最少若干兆(见文本)

SHMMIN最小共享内存段尺寸(字节)1

SHMALL可用共享内存的总数量(字节或者页面)如果是字节,就和 SHMMAX 一样;如果是页面,ceil(SHMMAX/PAGE_SIZE)

SHMSEG每进程最大共享内存段数量只需要 1 个段,不过缺省比这高得多。

SHMMNI系统范围最大共享内存段数量类似 SHMSEG 加上用于其他应用的空间

SEMMNI信号灯标识符的最小数量(也就是说,套)至少ceil(max_connections / 16)

SEMMNS系统范围的最大信号灯数量ceil(max_connections / 16) * 17 加 上用于其他应用的空间

SEMMSL每套信号灯最小信号灯数量至少 17

SEMMAP信号灯映射里的记录数量参阅文本

SEMVMX信号灯的最大值至少 1000 (缺省通常是32767,除非被迫,否则不要修改)

最重要的共享内存参数是 SHMMAX , 以字节记的共享内存段可拥有的最大尺寸。 如果你收到来自shmget 的类似Invalid argument 这样的错误信息,那么很有可能是你超过限制了。

有些系统对系统里面共享内存的总数(SHMALL )还有限制。 请注意这个数值必须足够大。 (注意:SHMALL 在很多系统上是用页面数,而不是字节数来计算的。)

系统里的最大信号灯数目是由SEMMNS 设置的, 因此这个值应该至少和 max_connections 设置一样大,并且每十六个联接还要另外加一个。  参数SEMMNI 决定系统里一次可以存在的信 号灯集的数目。 因此这个参数至少应该为 ceil(max_connections % 16) 。 降低允许的联接数目是一个临时的绕开失败的方法,这个启动失败通常被来自函数semget 的错误响应 No space left on device 搞得很让人迷惑。

有时候还可能有必要增大SEMMAP ,使之至少按照 SEMMNS 配置。这个参数定义信号灯资源映射的尺寸, 可用的每个连续的信号灯块在这个映射中存放一条记录。 每当一套信号灯被释放,那么它要么会加入到该映射中一条相连的已释放的块的入口中,要么注册成一条新的入口。如果映射填满了碎片, 那么被释放的信号灯就丢失了(除非重起)。因此时间长信号灯空间的碎片了会导致可用的信号灯比应该