【from:http://blog.csdn.net/cwj649956781/article/details/8804908】

消息队列:

1.每次msgrcv一个消息,1.那个消息会在内核中移除 2.每次msgrcv都只会给一个消息出来,不管你rcv用多大的buf来接收,都是可以的。如果msgrcv的bufSize小于实际的该消息的大小,那么可以设置一个标志:表示截断。 如果不设置,那么会报错。取不出来。

2.消息满了,则默认0为阻塞,直到有了空间位置,才能snd消息进入到内核。

消息空了,则默认为0阻塞,直到有了一个消息位置,才能 rcv消息进入到进程内存。

3.如果指定msgflg:MSG_NOERROR,如果函数取得的消息长度大于msgsz,将只返回msgsz 长度的信息,剩下的部分被丢弃了。如果不指定这个参数,E2BIG 将被返回,而消息则留在队列中不被取出。当消息从队列内取出后,相应的消息就从队列中删除了。

几乎所有的 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            【系统最多的消息队列数量(最多支持同时16个消息队列)】
max size of message (bytes) = 8192  【单个消息的最大字节数】
default max size of queue (bytes) = 16384  【默认的单个队列的大小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 文件。

参数msgmax,msgmni,msgmnb都已经成功修改  更改的方法:  在配置文件/etc/sysctl.conf中加上  kernel.msgmax=value  kernel.msgmni=value  kernel.msgmnb=value  然后运行sysctl -p  即可进行修改

max queues system wide = // msgmni
max size of message (bytes) = //msgmax
default max size of queue (bytes) = //msgmnb

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

消息队列在linuxC/c++里面没有找到有异步的信息,但是java..net有,而且windows的消息队列就是异步实现的。

http://hi.baidu.com/yelangdefendou/item/410e5a13b61b33038ebde4e9

http://hi.baidu.com/w_empty/item/467c004fa0b2460ac116132b

http://wenku.baidu.com/view/96c978dd360cba1aa811dac5.html

http://hi.baidu.com/w_empty/item/467c004fa0b2460ac116132b

http://hi.baidu.com/yelangdefendou/item/410e5a13b61b33038ebde4e9

linux消息队列的内核限制相关推荐

  1. linux消息队列非亲缘,linux进程

    linux进程Tag内容描述: 1.linux消息队列进程通信 一.消息队列的基本概念消息队列(也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一.另外两种是信号灯和共享内存.这些IPC机制 ...

  2. linux.调整收发队列,linux消息队列通信

    程序目的:学习linux消息队列通信 所用主要函数:msgget(),msgsnd(),msgrcv(),msgctl() 首先介绍每个函数的用法: (1)msgget 使用格式: #include ...

  3. linux 消息队列 msgget/msgsnd/msgrecv

    专栏内容:linux下并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息:地势坤,君子以厚德载物. 目录 前言 概述 原理 消息队列的大小 查看资源 接口 代码演示 结尾 前言 本专栏主要分 ...

  4. linux消息队列操作

    对消息队列的操作无非有以下三种类型: 1. 打开或创建消息队列 消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可 ...

  5. linux消息队列的使用

    消息队列 *消息队列是内核地址空间中的内部链表,通过内核在各个进程之间传递的内容.消息顺序发送到消息队列中,每个消息队列都有IPC标识符唯一地进行标识. msgbuf结构 struct msgbuf{ ...

  6. [Linux]消息队列

    我们知道进程间通信的方法有多种,主要有管道,消息队列,信号量,共享内存,socket等.之前介绍过管道,今天再介绍一个新的概念–消息队列. 消息队列:将一个进程到另一个进程之间发送数据块的方式.这些发 ...

  7. linux消息队列总结

    1.消息队列简介 实现linux进程通信的方式有5种: --信号(Singal) --管道(Pipe) --消息队列(Message) --信号量(Semaphore) 每种进程通信方式实现方式和功能 ...

  8. linux 消息队列_Linux消息队列

    消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器.将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序.可以解决两个进程的读写速度不同(处理数据速度不同),系统 ...

  9. Linux消息队列原理与应用

    消息队列 (也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一.另外两种是信号灯和共享内存.这些IPC机制使用共同的授权方法.只有通过系统调用将标志符传递给核心之后,进程才能存取这些资源.这 ...

最新文章

  1. 编译器架构Compiler Architecture(下)
  2. 想从事单片机工作,C语言要达到什么水平?
  3. 复制链接到safari浏览器打开_JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)...
  4. Gtk+2 Hello World:从源码到打包发布
  5. pycharm中传入命令行参数
  6. cas单点登陆。就这一篇就够了!!!!!
  7. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]45.描述一些对抗RSA侧信道攻击的防御方法
  8. git实现审核功能_一文教你如何搭建PDD分佣小程序实现财富自由
  9. ggThemeAssist|鼠标调整主题,并返回代码
  10. FPGA _Verilog HDL_十六进制7段码显示译码器设计实验
  11. 【android开发】:android真机测试
  12. WMPLib.WindowsMediaPlayer 的用法
  13. ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏
  14. 【原】oracle external table
  15. 【绿豆识别】基于matlab形态学绿豆计数【含Matlab源码 1113期】
  16. python 数据文件上传到ftp服务器
  17. 鼠标式光流传感器与多传感器融合
  18. 2010年10月1日 工作 计划 发奋图钱 再接再厉
  19. python中remove函数的用法_Remove函数用法
  20. 简单的命令改善你的Linux安全

热门文章

  1. 中国电信建成全球首个覆盖最广的商用下一代物联网
  2. ant+jenkins+testng+selenium集成环境搭建
  3. Matlab符号求导
  4. Primavera P6 安装配置指南
  5. 较高Google PR中文博客
  6. [Diary]忧伤,止不住忧伤……
  7. 好程序员大数据点睛:关于HDFS的二三事
  8. iOS初级开发学习笔记:APP生命周期的学习总结
  9. The Distribution File System
  10. C#操作DOS命令,并获取处理返回值