gatewayworker框架,開(kāi)啟了四個(gè)business進(jìn)程、四個(gè)gateway進(jìn)程。
使用:ps aux
命令查看的:
root 3225 0.0 0.0 481304 10032 ? S Mar03 0:00 WorkerMan: master process start_file=/opt/piplin/Gateway/start.php
root 3226 1.4 0.0 483352 15444 ? S Mar03 12:54 WorkerMan: worker process IMBusinessWorker none
root 3228 1.4 0.0 483352 15148 ? S Mar03 12:54 WorkerMan: worker process IMBusinessWorker none
root 3230 47.3 0.0 497724 28052 ? S Mar03 433:32 WorkerMan: worker process IMGateway websocket://im.800hr.com:8002
root 3231 50.0 0.0 498044 28308 ? R Mar03 458:51 WorkerMan: worker process IMGateway websocket://im.800hr.com:8002
root 3232 53.1 0.0 500192 30344 ? R Mar03 487:12 WorkerMan: worker process IMGateway websocket://im.800hr.com:8002
root 3233 56.0 0.0 501200 31360 ? R Mar03 513:52 WorkerMan: worker process IMGateway websocket://im.800hr.com:8002
root 3234 0.0 0.0 481304 9320 ? S Mar03 0:00 WorkerMan: worker process Register text://0.0.0.0:1239
root 4198 1.3 0.0 483352 13072 ? S Mar03 11:24 WorkerMan: worker process IMBusinessWorker none
root 14243 1.5 0.0 483352 13064 ? S 08:50 0:10 WorkerMan: worker process IMBusinessWorker none
服務(wù)器配置信息:
內(nèi)存:62g
cup核數(shù):10核
Speed: 10000Mb/s
已優(yōu)化Linux內(nèi)核、已安裝擴(kuò)展
業(yè)務(wù)請(qǐng)求量:1k——8k
想知道哪方面的原因會(huì)導(dǎo)致cpu上升?如果我提供的這些信息不能讓你判斷導(dǎo)致cpu上升的原因,可否列舉幾種導(dǎo)致cpu上升的原因?
壓測(cè)cpu上漲很正常,尤其業(yè)務(wù)調(diào)用api接口較多時(shí)。
除了幾個(gè)操作client_id的接口,其它所有api接口(例如Gateway::sendToGroup() Gateway::sendToUid()等)被調(diào)用時(shí)都要向所有g(shù)ateway進(jìn)程發(fā)起請(qǐng)求,那么一個(gè)客戶端請(qǐng)求在gatewayWorker里會(huì)裂變成多次gateway網(wǎng)絡(luò)請(qǐng)求,復(fù)雜的邏輯可能裂變成數(shù)十次gateway網(wǎng)絡(luò)請(qǐng)求。所以看起來(lái)是客戶端發(fā)起幾千請(qǐng)求,但是gatewayWorker內(nèi)部實(shí)際上可能處理幾萬(wàn)的內(nèi)部網(wǎng)絡(luò)請(qǐng)求調(diào)用,這會(huì)增加cpu調(diào)用消耗。然而一臺(tái)服務(wù)器的極限網(wǎng)絡(luò)請(qǐng)求可能就20萬(wàn)(好的服務(wù)器可能多一些),所以很容易成為瓶頸。
所以想辦法減少不必要的接口調(diào)用,例如isUidOnline(),例如不調(diào)用session相關(guān)接口,直接用$_SESSION
變量等。
開(kāi)啟盡量少的gateway進(jìn)程,例如只開(kāi)1個(gè)gateway進(jìn)程一般會(huì)降低cpu消耗。
重點(diǎn)
最后比較重點(diǎn)的說(shuō)下,GatewayWorker是一個(gè)長(zhǎng)連接分布式即時(shí)通訊框架,它所對(duì)應(yīng)的業(yè)務(wù)模型是類(lèi)似聊天、物聯(lián)網(wǎng)這種維持著大量連接,但是通訊量并不大的業(yè)務(wù)。所以壓測(cè)時(shí)應(yīng)該按照你實(shí)際業(yè)務(wù)場(chǎng)景壓測(cè),不能按照傳統(tǒng)http業(yè)務(wù)模型壓測(cè)。以傳統(tǒng)http業(yè)務(wù)模型去壓測(cè)10個(gè)客戶端就可以把服務(wù)器cpu打滿,那不能認(rèn)為服務(wù)器只能支持10個(gè)連接。以QQ聊天為例,一個(gè)2000人在線的群里每秒產(chǎn)生一條消息就已經(jīng)刷屏了,10個(gè)這樣的群20000人在線每秒產(chǎn)生的請(qǐng)求數(shù)就幾個(gè),這樣的請(qǐng)求量在服務(wù)端根本看不到什么cpu消耗。所以重點(diǎn)是評(píng)估下自己的業(yè)務(wù)模型,需要維持多少客戶端在線,每個(gè)客戶端多久向服務(wù)端發(fā)起一次請(qǐng)求,然后再查看cpu消耗。