反馈一个workerman连接数不均衡的问题,之前用workerman3没有发现这个问题,升级到4以后就很明显了

zgh419566

大家看,我这个workerman的连接数是否不均衡

之前用workerman3没有发现这个问题,升级到4以后就很明显了

这个是UDP服务器:

可以发现,进程1、2、3、4的请求连接数,总体呈现 1、2、4、8这样的倍数关系。

这个是TCP服务器:

这个是否需要workerman底层来进行优化?
需要怎么进行优化?

1051 2 0
2个回答

zgh419566

补充一下,这个问题给会是event扩展的BUG?
我看了我的另外一套系统,使用libevent就没有这个问题
截图

  • 暂无评论
walkor 打赏

开启 $worker->reusePort=true;这样就可以让每个进程均匀获取连接了。

workerman分配连接有两种模式

  1. 抢占式,也就是产生客户端连接时,所有空闲的进程都可以去抢占认领这个连接,只有一个进程会抢占成功,看到的结果是进程间连接分配可能不均匀
  2. 均匀分配,也就是开启 $worker->reusePort=true,由操作系统均匀分配连接到对应进程,看到的结果就是每个进程分配的连接数比较均匀

workerman 4.0.19之前版本默认开启了$worker->reusePort=true,是均匀分配。4.0.19之后的版本默认关闭了$worker->reusePort=true,采用抢占式分配。

并不是连接分配越均匀越好,例如4核服务器,开启100个进程,每个进程均匀获取1个连接,它的性能会比较差,因为4个cpu要频繁切换100个进程才能处理所有请求,导致进程切换开销很大,系统吞吐量降低明显。相反,100个进程,只有几个进程获得了连接,操作系统没有频繁的进程切换开销,性能可能更好。

  • Tinywan 2022-07-02

    看来上下文切换成本确实也很高

  • happy321 2022-07-04

    之前好像推荐和cpu核心数一样的~ 现在建议开启100个吗?

  • walkor 2022-07-04

    一般业务开cpu核数1-3倍就行,处理慢业务的可以开更高一些,比如一秒只能处理1个请求的,4核开100个进程也ok

  • zgh419566 2022-07-12

    增加 $worker->reusePort=true 之后进程的负载已经正常了,感谢!

年代过于久远,无法发表回答
×
🔝