大家看,我这个workerman的连接数是否不均衡
之前用workerman3没有发现这个问题,升级到4以后就很明显了
这个是UDP服务器: 可以发现,进程1、2、3、4的请求连接数,总体呈现 1、2、4、8这样的倍数关系。
这个是TCP服务器:
这个是否需要workerman底层来进行优化? 需要怎么进行优化?
补充一下,这个问题给会是event扩展的BUG? 我看了我的另外一套系统,使用libevent就没有这个问题
开启 $worker->reusePort=true;这样就可以让每个进程均匀获取连接了。
$worker->reusePort=true;
workerman分配连接有两种模式
$worker->reusePort=true
workerman 4.0.19之前版本默认开启了$worker->reusePort=true,是均匀分配。4.0.19之后的版本默认关闭了$worker->reusePort=true,采用抢占式分配。
并不是连接分配越均匀越好,例如4核服务器,开启100个进程,每个进程均匀获取1个连接,它的性能会比较差,因为4个cpu要频繁切换100个进程才能处理所有请求,导致进程切换开销很大,系统吞吐量降低明显。相反,100个进程,只有几个进程获得了连接,操作系统没有频繁的进程切换开销,性能可能更好。
看来上下文切换成本确实也很高
之前好像推荐和cpu核心数一样的~ 现在建议开启100个吗?
一般业务开cpu核数1-3倍就行,处理慢业务的可以开更高一些,比如一秒只能处理1个请求的,4核开100个进程也ok
增加 $worker->reusePort=true 之后进程的负载已经正常了,感谢!
补充一下,这个问题给会是event扩展的BUG?
我看了我的另外一套系统,使用libevent就没有这个问题
开启
$worker->reusePort=true;
这样就可以让每个进程均匀获取连接了。workerman分配连接有两种模式
$worker->reusePort=true
,由操作系统均匀分配连接到对应进程,看到的结果就是每个进程分配的连接数比较均匀workerman 4.0.19之前版本默认开启了
$worker->reusePort=true
,是均匀分配。4.0.19之后的版本默认关闭了$worker->reusePort=true
,采用抢占式分配。并不是连接分配越均匀越好,例如4核服务器,开启100个进程,每个进程均匀获取1个连接,它的性能会比较差,因为4个cpu要频繁切换100个进程才能处理所有请求,导致进程切换开销很大,系统吞吐量降低明显。相反,100个进程,只有几个进程获得了连接,操作系统没有频繁的进程切换开销,性能可能更好。
看来上下文切换成本确实也很高
之前好像推荐和cpu核心数一样的~ 现在建议开启100个吗?
一般业务开cpu核数1-3倍就行,处理慢业务的可以开更高一些,比如一秒只能处理1个请求的,4核开100个进程也ok
增加 $worker->reusePort=true 之后进程的负载已经正常了,感谢!