linux IPC

您所在的位置:网站首页 ipcs-q linux IPC

linux IPC

2024-07-12 03:56| 来源: 网络整理| 查看: 265

几乎所有的 Linux 发行版本都包含 ipcs 命令,该命令可以提供当前加载到系统上的IPC 资源信息。通过 ipcs 可以确定系统的当前 IPC 限制,还可以检查系统当前使用的上述三类IPC资源的状态。例如,假若应用程序启动失败,可以检查系统上的 IPC使用情况来判断是否已超出了某个IPC限制。为了确定系统的IPC资源状态,可以在 root用户权限下执行带有-u 选项的 ipcs 命令。 # ipcs -u 

------ Shared Memory Status -------- segments allocated 32 pages allocated 2361 pages resident 253 pages swapped   982 Swap performance: 0 attempts     0 successes 

------ Semaphore Status -------- used arrays = 128 allocated semaphores = 256 

------ Messages: Status --------

allocated queues = 0 used headers = 0 used space = 0 bytes 对于“ipcs -u”命令所显示的IPC资源,如果要确定其限制,可以使用“ipcs -l”命令: # ipcs -l 

------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1 

------ Semaphore Limits -------- max number of arrays = 128 max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 32 semaphore max value = 32767 

------ Messages: Limits -------- max queues system wide = 16 max size of message (bytes) = 8192 default max size of queue (bytes) = 16384 上述输出表明,该系统已经到达信号量数组(或信号量集合)的数目上限。这个限制可以通过增加内核参数 semmni 的取值来解决,该参数定义了系统能够拥有的信号量集合的总数。Linux 可以动态调整大多数内核IPC 参数值的大小,也可以静态地修改

 

消息队列为进程提供了一种异步传递消息的方法。在使用 msgget()建立了一条消息队列之后,发送进程和接收进程就可以通过这条消息队列交换消息。发送进程将消息发送到指定的消息队列,而接收者试图从指定的消息队列中获取消息。如果该队列中没有消息的话,则接收者根据自己是否要等待的意愿而阻塞或返回某个标志。 表 13-2 简要描述了在当前Linux 2.4/2.6 内核实现中提供的3 个消息队列参数。 表 13-2 与消息队列相关的内核参数 名    称 描    述 默 认 值 最 大 值 msgmni 最大消息队列数 16 2GB msgmax 最大消息长度(字节数) 8192 2GB msgmnb 消息队列中的最大字节数 16384 2GB 

注意,第 4 列中给出的最大值取决于数据类型。上述 3 个内核参数都是 int 类型,因此在32 位Intel 机器上,硬性上限是2GB。 Linux 还定义了其他当前未用的消息队列相关参数。 以下各节具体分析与消息队列相关的参数

 

13.5.1 msgmni msgmni 定义了系统范围内的消息队列上限。与信号量一样,消息队列也拥有一个相关的标识符。在系统初始化阶段里,内核创建一个指向消息队列标识符结构的指针数组。该数组的项数由 msgmni确定。对于每个消息队列,Linux 内核为标识符分配44B,为消息队列数据结构分配 96B。为了获得更多的消息队列资源,可以动态增加 msgmni 取值。和信号量一样,消息队列标识符的最大数目也受限于IPCMNI。msgmni的默认上限为 16B,这可能不足以保证一些大型数据库应用平滑地运行。如果在系统上要运行数据库应用的话,推荐默认上限值是 128B。 13.5.2 msgmax msgmax 限制进程可以发送的消息长度。该参数由 Msgsnd()函数加以应用。如果待发送消息的长度超过该值,则返回一个错误。该参数可以在运行时调整

13.5.3 msgmnb msgmnb 确定一个消息队列的容量。该参数的取值存储在消息队列标识符结构的某个域中,用于确定是否存在着对新消息进行排队的空间。msgmnb 值可以动态修改,默认为16384。修改其取值会影响到所有新的消息队列的容量。用户可以通过 Msgctl()系统调用来增加现有消息队列的容量

修改消息队列的参数

1.永久修改root用户下修改/etc/sysctl.conf 文件。

2.临时修改root用户下sysctl -w kernel.msgmnb= 1048576



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3