进程间通信限制

本主题描述进程间通信 (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 位内核。 所有其他值都相同。