AIX系统共享内存最大值限制:
* 256M bytes before AIX 4.3.1
* 2G bytes for AIX 4.3.1 through AIX 5.1
* 64G bytes for 64-bit applications for AIX 5.1 and later
* Minimum shared-memory segment size is 1 byte.
* Maximum number of shared memory IDs is 4096 for operating system releases before AIX 4.3.2, 131072 for releases AIX
出现共享内存分配失败时,首先考虑是否有足够空闲空间。
AIX的共享内存从paging space中分配,物理内存小于2G时,该值是物理内存1.5倍,否则该值与物理内存相等,一般不小于2G,paging space是分布在不同物理磁盘上的。
执行命令topas查看paging space;
执行命令smitty chps、smitty mkps分别可以修改、创建paging space;
其次,考虑进程是否加载超过11段的共享内存。
对于64位进程,同一进程可连接最多268435456个共享内存段;
对于32位进程,同一进程可连接最多11个共享内存段,除非使用扩展的shmat;
AIX4.1以后版本将内存分段管理,且要求一段共享内存必须映射内存段的起始位置,即每个共享内存地址必须是2^18整数倍。每个进程可以使用16个256M的内存段,其中11段可用做共享内存,即默认情况进程最多只能使用11段共享内存,如果进程扩展了数据段空间,共享内存将不足11段。
增加环境变量:export EXTSHM=ON
这样共享内存地址不受256M限制,即一段共享内存可以使用一个普通地址,只要空间足够可以加载很多段共享内存。
修改系统限制/etc/security/limits,修改nofiles=-1 nofiles_hard=-1