进程间通信限制
本主题描述进程间通信 (IPC) 机制的系统限制。
在某些UNIX系统中,系统管理员可以编辑/etc/master文件,并定义 IPC 机制的限制(半进程、共享内存段和消息队列)。 此方法的问题是限制越高,操作系统使用的内存越多,且性能可能受到负面影响。
AIX®使用不同的方法。 在 AIX中,为 IPC 机制定义了不可配置的上限。 按需已分配并释放个别 IPC 数据结构,因此内存需求与当前系统的 IPC 机制使用有关。
方法的差别有时会混淆正在安装或使用数据库的用户。 最令人费解的限制是每个进程可同时连接的共享内存段的最大数量。 对于 64 位进程,共享内存段的最大数量为 268435456。 对于 32 位进程,共享内存段的最大数目为 11 ,除非使用扩展的 shmat 功能。
下表总结了 IPC 机制的信号量限制。
| 信号量 | 4.3.0 | 4.3.1 | 4.3.2 | 5.1 | 5.2 | 5.3 | 7.1 |
|---|---|---|---|---|---|---|---|
| 32 位内核的信号量标识的最大数量 | 4096 | 4096 | 131072 | 131072 | 131072 | 131072 | 不适用 |
| 64 位内核的信号量标识的最大数量 | 4096 | 4096 | 131072 | 131072 | 131072 | 1048576 | 1048576 |
| 每个信号量标识的最大信号量 | 65535 | 65535 | 65535 | 65535 | 65535 | 65535 | 65535 |
| 每个 semop 调用的最大操作数量 | 1024 | 1024 | 1024 | 1024 | 1024 | 1024 | 1024 |
| 每个进程的最大撤销条目数量 | 1024 | 1024 | 1024 | 1024 | 1024 | 1024 | 1024 |
| 撤销结构的大小 (B) | 8208 | 8208 | 8208 | 8208 | 8208 | 8208 | 8208 |
| 信号量的最大值 | 32767 | 32767 | 32767 | 32767 | 32767 | 32767 | 32767 |
| 退出时调整的最大值 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 |
下表总结了 IPC 机制的消息队列限制。
| 消息队列 | 4.3.0 | 4.3.1 | 4.3.2 | 5.1 | 5.2 | 5.3 | 7.1 |
|---|---|---|---|---|---|---|---|
| 最大消息大小 | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB |
| 队列上的最大字节数 | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB | 4 MB |
| 32 位内核的消息队列标识的最大数量 | 4096 | 4096 | 131072 | 131072 | 131072 | 131072 | 131072 |
| 64 位内核的消息队列标识的最大数量 | 4096 | 4096 | 131072 | 131072 | 131072 | 1048576 | 1048576 |
| 每个队列标识的最大消息数量 | 524288 | 524288 | 524288 | 524288 | 524288 | 524288 | 524288 |
下表总结了 IPC 机制的共享内存限制。
| 共享内存 | 4.3.0 | 4.3.1 | 4.3.2 | 5.1 | 5.2 | 5.3 | 7.1 |
|---|---|---|---|---|---|---|---|
| 段的最大大小(32 位进程) | 256 MB | 2 GB | 2 GB | 2 GB | 2 GB | 2 GB | 2 GB |
| 32 位内核的段的最大大小(64 位进程) | 256 MB | 2 GB | 2 GB | 64 GB | 1 TB | 1 TB | 不适用 |
| 64 位内核的段的最大大小(64 位进程) | 256 MB | 2 GB | 2 GB | 64 GB | 1 TB | 32 TB | 32 TB |
| 段的最小大小 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 共享内存标识的最大数量(32 位内核) | 4096 | 4096 | 131072 | 131072 | 131072 | 131072 | 131072 |
| 共享内存标识的最大数量(64 位内核) | 4096 | 4096 | 131072 | 131072 | 131072 | 1048576 | 1048576 |
| 每个进程的段的最大数量(32 位进程) | 11 | 11 | 11 | 11 | 11 | 11 | 11 |
| 每个进程的段的最大数量(64 位进程) | 268435456 | 268435456 | 268435456 | 268435456 | 268435456 | 268435456 | 268435456 |
注: 对于 32 位进程,使用扩展 shmat 功能时,每个进程的最大段数仅受地址空间大小限制。
AIX.3 的 IPC 限制
- 对于信号和消息队列,该表显示了系统限制
- 对于共享内存,最大共享内存段大小为 256 GB。
- 对于没有扩展 shmat 能力的共享内存:
- 进程可连接最多 11 个共享内存段。
- 对于有扩展 shmat 能力的共享内存:
- 当连接共享内存段时,其大小舍入为 4096 字节的倍数
- 进程可连接的共享内存段数量与可用地址空间相符。 最大的可用地址空间大小为 11 个段,或 256 MB 的 11 倍。
- 如果进程开始执行时环境变量 EXTSHM 的值为 ON,那么使用扩展 shmat 能力。
- 如果使用大或超大地址空间模型,用于连接共享内存段的可用地址空间被减少。
AIX 4.3.1的 IPC 限制
- 共享内存段的最大大小从 256 MB 上升到 2 GB。 当连接大于 256 MB 的共享内存段时,其大小被舍入到 256 MB 的倍数,即使使用了扩展的 shmat 能力。
AIX 4.3.2的 IPC 限制
- 消息队列、信号量标识和共享内存段的最大数量为 131072。
- 每个队列的最大消息数量为 524288。
AIX 5.1的 IPC 限制
- 64 位进程的共享内存段的最大大小为 64 GB。 32 位进程不能连接大于 2 GB 的共享内存段。
AIX 5.2的 IPC 限制
- 64 位进程的共享内存段的最大大小为 1 TB。 32 位进程不能连接大于 2 GB 的共享内存段。
- 使用超大地址空间模型时,无需使用扩展的 shmat,32 位应用程序就可使用 shmat 能力以获取多于 11 个段。 获取有关超大地址空间模型的更多信息。
- 应用程序可用使用 vmgetinfo 系统调用查询系统的 IPC 限制。
AIX 5.3的 IPC 限制
- 对于 64 位进程,共享内存段的最大大小为 32 TB。 32 位进程不能连接大于 2 GB 的共享内存段。
- 使用超大地址空间模型时,无需使用扩展的 shmat,32 位应用程序就可使用 shmat 能力以获取多于 11 个段。 获取有关超大地址空间模型的更多信息。
- 应用程序可用使用 vmgetinfo 系统调用查询系统的 IPC 限制。
AIX 6.1的 IPC 限制
AIX 6.1 不再支持 32 位内核。 所有其他值都相同。