gatewayworker框架,开启了四个business进程、四个gateway进程。
使用: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
服务器配置信息:
内存:62g
cup核数:10核
Speed: 10000Mb/s
已优化Linux内核、已安装扩展
业务请求量:1k——8k
想知道哪方面的原因会导致cpu上升?如果我提供的这些信息不能让你判断导致cpu上升的原因,可否列举几种导致cpu上升的原因?
需要贴出详细的信息
贴到上面了,老哥
客户端频繁建立连接?
压测cpu上涨很正常,尤其业务调用api接口较多时。
除了几个操作client_id的接口,其它所有api接口(例如Gateway::sendToGroup() Gateway::sendToUid()等)被调用时都要向所有gateway进程发起请求,那么一个客户端请求在gatewayWorker里会裂变成多次gateway网络请求,复杂的逻辑可能裂变成数十次gateway网络请求。所以看起来是客户端发起几千请求,但是gatewayWorker内部实际上可能处理几万的内部网络请求调用,这会增加cpu调用消耗。然而一台服务器的极限网络请求可能就20万(好的服务器可能多一些),所以很容易成为瓶颈。
所以想办法减少不必要的接口调用,例如isUidOnline(),例如不调用session相关接口,直接用
$_SESSION
变量等。开启尽量少的gateway进程,例如只开1个gateway进程一般会降低cpu消耗。
重点
最后比较重点的说下,GatewayWorker是一个长连接分布式即时通讯框架,它所对应的业务模型是类似聊天、物联网这种维持着大量连接,但是通讯量并不大的业务。所以压测时应该按照你实际业务场景压测,不能按照传统http业务模型压测。以传统http业务模型去压测10个客户端就可以把服务器cpu打满,那不能认为服务器只能支持10个连接。以QQ聊天为例,一个2000人在线的群里每秒产生一条消息就已经刷屏了,10个这样的群20000人在线每秒产生的请求数就几个,这样的请求量在服务端根本看不到什么cpu消耗。所以重点是评估下自己的业务模型,需要维持多少客户端在线,每个客户端多久向服务端发起一次请求,然后再查看cpu消耗。
学习了
学习了
学习了
感谢老大的分享
学习了
学习了