brpc压测,主机CPU压不满
Describe the bug (描述bug) brpc/example/multi_threaded_echo_c++ 启动brpc服务端,启动brpc客户端进行压测,thread_num为200,在同一台主机上启动多个客户端,系统CPU始终占不完,top命令查看,最多只能占用到85%左右,还有10%+的idle. server进程的CPU占用在1700%左右。如果启动两个server,一个监听8002端口,一个监听8003端口,在同一台主机上分别启动多个客户端对这两个server进行压测,加大压力,系统CPU还是只能占到85%左右,此时两个server进程的CPU占用合起来在1700%左右。看起来像是rpc服务端受到什么系统资源的限制,压测时无法占满主机的CPU,调整client.cpp中的attachment_size和request_size大小还是如此,压测无法将主机CPU资源占满
To Reproduce (复现方法) 见 (描述bug)
Expected behavior (期望行为) 同一台主机,加大客户端压力,可以压满主机的CPU;或者启动不同的rpc服务端,分别进行压测,可以压满主机的CPU
Versions (各种版本) OS: Linux optane152 Compiler: gcc version 8.3.0 (GCC) brpc: 当前git上最新版本的代码 protobuf:
Additional context/screenshots (更多上下文/截图)
有可能是网络栈瓶颈
很水 @.***
客户端可以用多台主机试试,先排除是客户端侧的问题。另外server端的主机监控可以提供一下么,cpu和网络带宽
客户端可以用多台主机试试,先排除是客户端侧的问题。另外server端的主机监控可以提供一下么,cpu和网络带宽
![]()
![]()
同一台主机,启动一个服务端进程,8个客户端进程的server端的主机监控如上,此时client.cpp中thread_num=200,request_size=32,其它代码未调整。此时在另一台主机启动客户端进程, server端主机所在CPU占用没有明显变化,server进程的CPU进程占用也没有明显变化
连接方式改成pooled试试
连接方式改成pooled试试
连接方式改为pooled之后,压测时CPU占用增大,idle剩下5%左右,但是qps降低了5%左右
这是正常的。因为连接方式为single模式下,在单连接上qps很高的情况下可以合并socket读写操作,性能会高一些。但是在真实场景下,client往往分布在多台机器,server会处理较多的连接,每个连接上qps较少,从性能的角度上看,pooled的性能更接近真实的场景。