壓測(cè)的時(shí)候一個(gè)worker我開了50個(gè)進(jìn)程。但是發(fā)現(xiàn)有些處理了幾萬(wàn)個(gè)請(qǐng)求,有些只有幾十個(gè),差的特別多。想知道是因?yàn)槭裁础?dǎo)致的。。我用的是騰訊的lb作為負(fù)載,但是客戶端壓測(cè)的時(shí)候會(huì)報(bào)出來(lái)鏈接超時(shí),看woker負(fù)載也不是很大。最多的一個(gè)進(jìn)程處理了3w個(gè)左右 的請(qǐng)求。其他的都是幾百或者幾十?,F(xiàn)在沒法找出具體的原因。
進(jìn)程間負(fù)載均衡:
workerman默認(rèn)是搶占式的,誰(shuí)空閑誰(shuí)去接受連接處理請(qǐng)求。這說明你的業(yè)務(wù)不用開這么多進(jìn)程。
因?yàn)镃PU數(shù)量有限,開很多進(jìn)程后并不是每個(gè)進(jìn)程都平均處理請(qǐng)求就好。
比如2個(gè)進(jìn)程就能干完的活兒,非要50個(gè)進(jìn)程一起干,那每個(gè)cpu處理的進(jìn)程數(shù)就變多,
進(jìn)程間切換的開銷變大,整個(gè)系統(tǒng)吞吐量反而變低。
進(jìn)程數(shù)不宜太多,關(guān)于http://doc.workerman.net/315230
如果非要平均,可以設(shè)置 $woker->reusePort = true,關(guān)于http://doc.workerman.net/315142,這樣每個(gè)進(jìn)程處理的連接數(shù)是平均的。
連接超時(shí)問題原因:
原因很多,要具體情況具體分析。
比如服務(wù)器負(fù)載變高、業(yè)務(wù)處理不夠快導(dǎo)致backlog滿、網(wǎng)絡(luò)帶寬不夠(包括本地局域網(wǎng)帶寬)、系統(tǒng)內(nèi)核沒有優(yōu)化(包括壓測(cè)端服務(wù)器)、網(wǎng)絡(luò)環(huán)境差等等
http://doc.workerman.net/315302
還有,壓測(cè)要給workerman安裝event擴(kuò)展,http://doc.workerman.net/315116
好的謝謝大大,昨天其實(shí)在群里問過你這個(gè)問題了。event 擴(kuò)展之前已經(jīng)裝好了。我現(xiàn)在本地調(diào)用本地壓測(cè)一下看看。排除下是網(wǎng)絡(luò)的原因。還有就是reusePort 這個(gè)參數(shù),如果我是短連接應(yīng)用的話開啟會(huì)有性能提示嗎?
@1:恩我現(xiàn)在繁忙的業(yè)務(wù)開了50個(gè)左右的進(jìn)程,8核的機(jī)器。還有就是,連接關(guān)閉是由客戶端關(guān)閉比較好。還是我sendmessage成功之后就直接關(guān)閉比較好呢。感覺客戶端控制更好一點(diǎn)。
@1:我現(xiàn)在本地直接鏈接本地的服務(wù) 我用ab 壓測(cè) ab -c 2000 -n 2000 還是會(huì)報(bào)報(bào)錯(cuò)
connect to tcp://10.8.6.98:13120 (Connection timed out)。已經(jīng)優(yōu)化過內(nèi)核了。ulimit 也改成10w了。 $woker->reusePort 這個(gè)參數(shù)我也設(shè)置為true了, wokerman的運(yùn)行信息如下
Workerman version:3.5.1 PHP version:7.1.10
start time:2017-11-10 11:38:02 run 0 days 0 hours
load average: 0.26, 1, 1 event-loop:\Workerman\Events\Event
16 workers 90 processes
想知道還有什么原因可能導(dǎo)致嗎。
@1:對(duì)了報(bào)錯(cuò)的時(shí)候還有一個(gè)壓測(cè)客戶端 鏈接redis超時(shí)的錯(cuò)誤,不知道跟連上wokerman有沒有關(guān)系
@1: 改成tcp://127.0.0.1 還是會(huì)報(bào)鏈接超時(shí)。壓測(cè)的時(shí)候是 腳本 ab -c 2200 -n 2200