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