轉(zhuǎn)自與https://blog.csdn.net/qmhball/article/details/53888197
1. 相關函數(shù)
kernel.msgmnb = 4203520同辣,消息隊列的最大字節(jié)數(shù)
kernel.msgmni = 64,最多允許創(chuàng)建多少個消息隊列
kernel.msgmax = 8192惭载,消息隊列單條數(shù)據(jù)最大的長度
2.1 臨時修改
命令行執(zhí)行如下命令
sysctl -w kernel.msgmax=1024
1
將msgmax改為1024旱函,其它兩個參數(shù)修改方法類似
2.2 持久修改
修改/etc/sysctl.conf文件,增加(修改)配置
kernel.msgmnb=65536kernel.msgmax=8192
1
2
運行如下命令使配置生效
/sbin/sysctl-p
1
3.1單條消息超過kernel.msgmax的情況
此時push()返回false描滔,php會報類似下面的錯誤
PHPWarning:swoole_process::push():msgsnd()failed.Error:Invalidargument[22]
1
3.2消息總量超過kernel.msgmnb的情況
默認模式下(阻塞模式)時棒妨,push方法會阻塞等待。
非阻塞模式下,push方法會立即返回false券腔。?
注意伏穆,這里說的是隊列總體大小,如果你的機器上有多個隊列纷纫,總體大小是指所有隊列所占空間的總和枕扫。
3.3如何在進程重啟后延用之前的隊列
進程啟動后使用ipcs -q查看隊列的key
ipcs-q------MessageQueues--------keymsqidownerpermsused-bytesmessages0x0010e9e7360448ballqiu66618322
1
2
3
4
5
重啟前修改代碼,將useQueue()的第一個參數(shù)填寫上面的key值辱魁。
$process=newswoole_process('callback_function',false,false);$process->useQueue(0x0010e9e7);
1
2
這樣烟瞧,即使進程重啟,依然可以延用之前的隊列染簇,隊列中若有未處理完的數(shù)據(jù)可以繼續(xù)通過pop()取得参滴。