需求
因为需要在多个进程之间通过消息队列传输数据,所以需要加大消息队列的大小。
解决
首先确定使用的是 System V
还是 POSIX
的消息队列,这两种从 API
到配置都不一样。本文主要提的是 System V
的消息队列。
System V
查看当前系统中的设置
cat /proc/sys/kernel/msgmni
cat /proc/sys/kernel/msgmax
cat /proc/sys/kernel/msgmnb
# 查看当前使用
ipcs -u
# 查看限制
ipcs -l
修改配置
System V
的消息队列配置文件是 /etc/sysctl.conf
这个总的配置文件或者 /etc/sysctl.d/
文件夹下面的细分配置文件。
sudo vim /etc/sysctl.d/11-message-queue.conf
# set message queue
# set message number of any queue
kernel.msgmni = 312
# set one message max size
kernel.msgmax = 8192
# set all message totall max size
kernel.msgmnb = 319488
生效配置
可以参考 /etc/sysctl.d/README.sysctl
里面的重新加载的命令。
service procps restart
检查修改结果
使用 ipcs -l
来查看结果。
POSIX
查看系统限制
# 只看 message queue
ulimit -q
# 所有的限制
ulimit -a
查看详细设置
通过 man mq_overview
来查看消息队列的介绍。
# 消息大小
cat /proc/sys/fs/mqueue/msgsize_max
# 消息数目
cat /proc/sys/fs/mqueue/queues_max
修改
直接修改相应的文件即可。