`
swvip
  • 浏览: 154522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux IPC-消息队列

阅读更多

几乎所有的 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

分享到:
评论

相关推荐

    linux下进程间通信--消息队列

    标题"Linux下进程间通信--消息队列"指出了我们讨论的核心——如何在Linux环境中利用消息队列进行进程间的通信。下面我们将深入探讨消息队列的概念、工作原理、使用方法以及提供的优点。 1. **消息队列概念**: ...

    linux 进程通信-消息队列

    ### Linux 进程通信——消息队列详解 随着信息技术的发展,特别是九十年代以来,越来越多的数据处理系统采用了开放系统的架构,比如客户机/服务器模式。在这种模式下,客户端发起服务请求,服务器端响应并处理请求...

    Linux--MSMQ-.rar_MSMQ Linux 平台_dsp消息队列_linux 平台_linux 消息队列_消息队列

    在Linux中,消息队列是Unix/Linux操作系统提供的五种进程间通信(IPC,Inter-Process Communication)机制之一,其他四种包括管道、共享内存、信号量和套接字。消息队列允许进程向队列中写入消息,并由其他进程按照...

    Linux进程间通信-消息队列实例.pdf

    【Linux进程间通信-消息队列实例】 在操作系统中,进程间通信(Inter-Process Communication, IPC)是多个进程共享数据、协调工作的重要机制。在Linux系统中,提供了多种进程间通信方式,如管道、信号量、共享内存...

    xxjyjy5.rar_LINUX消息队列_linux 消息队列_linux 消息_linux 消息队列_消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC, Inter-Process Communication)机制。消息队列允许进程之间通过消息传递数据,提供了一种可靠且高效的数据交换方式。本教程将深入探讨Linux环境下的...

    linux下的消息队列编程

    Linux 消息队列编程 Linux 消息队列是一种进程间通信机制,它允许不同的进程之间传递消息。消息队列是一个链表,每个消息都是一个记录,具有特定的格式和优先级。进程可以按照一定的规则添加新消息,并且可以从...

    Linux-IPC-进程间通信实例

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是实现不同进程间数据交换的关键技术。本文将深入探讨Linux IPC的六种主要方法,并通过具体的实例来讲解如何使用这些方法。首先,我们来看看标题...

    Linux系统System V(IPC)消息队列,C/C++

    linux下C语言进程通信--消息列队,可用于多个进程之间通信,也可在一个进程内部当作队列来使用,包含了3个demo,使用make编译,得到send发送端,recv1接收端1,recv1接收端2这3个可执行文件,运行就可以了

    msg_creat.rar_LINUX消息队列_linux 消息队列_linux 消息队列_消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC, Inter-Process Communication)机制。消息队列允许进程之间通过消息传递数据,提供了一种可靠且高效的数据交换方式。标题"msg_creat.rar_LINUX消息...

    linux消息队列源码

    Linux消息队列是一种进程间通信(IPC)机制,允许不同进程之间传递数据。它不同于管道、套接字或共享内存,因为消息队列提供了异步通信的可能性,即发送方不必等待接收方立即处理消息。在Linux内核中,消息队列作为...

    Linux下的消息队列测试程序,helloworld MessageTest

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC,Inter-Process Communication)机制。消息队列允许一个进程发送消息给另一个进程,而接收进程可以在任何时间读取消息,不受发送进程的影响。这种通信...

    linux下的消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC, Inter-Process Communication)机制。消息队列允许进程之间通过消息传递数据,提供了一种可靠且高效的数据交换方式。本压缩包包含了一个名为...

    linux-msgqueue-test.rar_linux 消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC,Inter-Process Communication)机制。消息队列允许进程之间以消息为单位进行数据交换,它具有持久性、顺序性和可控制的消息大小等特性。本项目名为...

    操作系统+进程间通信-消息队列+实现聊天室功能

    在Linux系统中,消息队列由System V IPC或POSIX IPC提供支持,它们提供了创建、发送、接收和删除消息队列的接口。 实现聊天室功能通常涉及到以下几个关键步骤: 1. **创建消息队列**:首先,需要一个进程(通常为...

    消息队列源码-Linux.zip

    这个“消息队列源码-Linux.zip”压缩包很可能包含了Linux内核中实现消息队列的源代码,对于理解和研究Linux IPC机制的开发者来说是一份宝贵的资源。 消息队列的工作原理是将消息存储在一个队列中,这些消息可以由一...

    linux下消息队列例程源码.zip

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC)机制,它允许不同进程之间传递结构化数据。这个“linux下消息队列例程源码.zip”压缩包很可能包含了一些示例代码,用于演示如何在Linux内核环境下使用...

    linux使用消息队列实现进程间双向通信

    本文将深入探讨如何利用消息队列这一IPC机制实现进程间的双向通信。消息队列允许进程异步地发送和接收消息,提供了一种高效且灵活的数据交换方式。 消息队列是由内核管理的数据结构,它存储由进程发送的消息,并...

    基于Linux消息队列的简易聊天室(C语言)(附源代码)

    Linux IPC通信利用消息队列消息机制,多线程通信,字符串处理,链表操作,信号简单处理。消息队列是System V支持一种IPC机制,通过类似链表的操作向一个FIFO里通过msgsnd发送用户自定义数据,进程可以通过msgrcv来...

    Linux消息队列分析及应用

    在Linux内核中,消息队列的实现主要位于/ipc/msg/目录下的msg.c文件中。这里包含了消息队列的所有关键功能,包括消息的创建、发送、接收和控制。内核中处理消息队列的核心逻辑分布在多个函数中,例如sys_msgget()...

    msg.zip_LINUX消息队列_linux 消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC,Inter-Process Communication)机制。消息队列允许一个进程发送消息给另一个进程,并且这些消息会被存储在一个内核管理的数据结构中,直到接收进程...

Global site tag (gtag.js) - Google Analytics