在用消息队列做进程间通信时遇到的一个小问题大概是这样的:有多个常驻进程且每个进程需要创建一个消息队列; 在测试过程中发现只有16个进程能成功创建消息队列, 检查发现是系统内核参数限制了(cat /PRoc/sys/kernel/msgmni 查看当前系统范围内限制最大消息队列数是16)
模拟代码:
for($i = 1; $i <=20; $i++) { $id = msg_get_queue($i); var_dump($id);}执行输出:
resource(15) of type (sysvmsg queue)resource(16) of type (sysvmsg queue)resource(17) of type (sysvmsg queue)resource(18) of type (sysvmsg queue)resource(19) of type (sysvmsg queue)resource(20) of type (sysvmsg queue)resource(21) of type (sysvmsg queue)resource(22) of type (sysvmsg queue)resource(23) of type (sysvmsg queue)resource(24) of type (sysvmsg queue)resource(25) of type (sysvmsg queue)resource(26) of type (sysvmsg queue)resource(27) of type (sysvmsg queue)resource(28) of type (sysvmsg queue)resource(29) of type (sysvmsg queue)resource(30) of type (sysvmsg queue)bool(false)bool(false)bool(false)bool(false)在文件/etc/sysctl.conf中添加或修改kernel.msgmni的值来改变这个限制
新闻热点
疑难解答
图片精选