3臺(4cpu 8核)webman redis_consumer消費(fèi)
3臺(4cpu 8核)gateway負(fù)載均衡
3臺(4cpu 8核)businessworker redis_queue生產(chǎn)
3臺(6核 32G) jmeter每臺3000線程壓測
一直有如下問題:
65280 導(dǎo)致這個(gè)退出碼的原因是業(yè)務(wù)代碼有致命錯(cuò)誤,例如調(diào)用了不存在的函數(shù)、語法錯(cuò)誤等。
編輯 workerman/Worker.php 里 checkError()方法,找到
$errors = error_get_last();
改成
$errors = error_get_last();
var_dump($errors);
看下具體是什么錯(cuò)誤。
沒有錯(cuò)誤,結(jié)果都是null。
有個(gè)現(xiàn)象是壓力一起動,剛開始還好,所有日志(自己在業(yè)務(wù)邏輯中記錄的)都有打印,隔幾秒之后就不行了,好像程序跟阻塞了一樣,手機(jī)操作業(yè)務(wù)就沒反應(yīng)了,是不是業(yè)務(wù)機(jī)還不夠?
業(yè)務(wù)鏈路是:登錄(webman)->鏈接websocket(gateway)->模擬websocket發(fā)送數(shù)據(jù)請求(gateway),數(shù)據(jù)進(jìn)入redis_queue->業(yè)務(wù)接到(從redis_queue中取出)后處理(webman)->返回結(jié)果放回redis_queue(webman)->gateway從redis_queue取出廣播出去。
場景:模擬登錄,鏈接websocket,然后進(jìn)入直播間
可能哪里出現(xiàn)瓶頸了,沒有現(xiàn)場沒有辦法給你定位。每臺服務(wù)器php start. status
執(zhí)行下看下event-loop是不是\Workerman\Events\Event
。還有需要按照手冊優(yōu)化下每臺服務(wù)器的linux內(nèi)核 http://www.wtbis.cn/doc/workerman/appendices/kernel-optimization.html
優(yōu)化過代碼后未再出現(xiàn)。
還有兩個(gè)疑問:
1、怎樣能確認(rèn)內(nèi)核是優(yōu)化過的,模擬超過1000鏈接么?(a、配置確定改了b、event模塊確定已安裝)
2、自定義的進(jìn)程(process.php中的),一般開幾個(gè)進(jìn)程好
命令 sysctl -a
會顯示生效的內(nèi)核參數(shù)
進(jìn)程數(shù)看業(yè)務(wù)類型,如果沒有網(wǎng)絡(luò)調(diào)用(curl、數(shù)據(jù)庫、redis等)就開成和cpu核數(shù)一樣,有的話就開cpu核數(shù)的2-3倍。