在用消息隊列做進程間通信時遇到的一個小問題大概是這樣的:有多個常駐進程且每個進程需要創建一個消息隊列; 在測試過程中發現只有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的值來改變這個限制
新聞熱點
疑難解答
圖片精選