当前位置:C++技术网 > 资讯 > Linux增加消息队列的长度

Linux增加消息队列的长度

更新时间:2019-03-19 09:56:29浏览次数:1+次

    在进行跨进程通信的时候,经常会借助系统的消息队列来实现。默认情况下,消息队列的大小是有限的。如果是在高并发的场景下运行,队列满了之后,就会导致后续的消息无法进入消息队列而丢失,进而导致通信失败,功能失效。
导致队列满的原因一般是:
1.取出消息速度小于存入消息速度
2.一些消息因为逻辑问题无法取出而一直积压在消息队列中(程序逻辑漏洞)
第二点我们是要在程序设计上规避,而第一点则是因为消息队列较小,需要扩大容量,来做缓存。这样尽管取出的速度较慢,依然不会丢失消息。

下面是修改Linux消息队列大小的方法:
打开配置文件/etc/sysctl.conf,添加内容如下:

kernel.msgmni=2000
kernel.msgmax=1024
kernel.msgmnb=204800

kernel.msgmni:系统的消息队列数目,要比程序需要的最大的消息数大。
kernel.msgmax:消息最大的大小字节数
kernel.msgmnb:消息队列最大的容量字节数

    通过kernel.msgmnb和我们自己定义的消息大小,我们可以计算出消息队列能够存储的我们的程序消息的最大的消息数,如我们的消息大小为100,那么消息队列最大能存储2048个消息。那么此时kernel.msgmni设置就小了,要将此值设置超过2048。

    最后要在命令行执行:

sysctl -p 

    才会生效哦。

Linux增加消息队列的长度