关于webman多进程的一个问题

tianya

我在webman的server.php中设置了count=10,10个进程。
然后index控制器中写入了sleep(1),其他没有改动。

内网中使用php的curl_multi发起了20个并发请求到webman中,在我的理想中应该是2秒结束curl的运行(10个进程处理20个请求,分两批呗,各占用1秒),但实际上用了4秒 甚至更多。
然后我将curl_multi改为了10个并发请求,理想中应该是1秒完成,但测试结果发现还是2秒或更多
继续修改,将curl_multi改为5个并发请求,心想着count=10,我这5个请求怎么着也是一起完成吧?测试后发现还是1~2秒中跳动,即便我将count=100或更多都是一样的结果。
然后在sleep(1)前加了一个echo time(); 在控制台发现感觉不管我curl_multi访问多少个请求,都是对半处理,永远无法同时,10个并发 webman就同时处理5个,100个并发那就同时处理50个。

尝试了安装了event,将配置文件reusePort=true都无果。

想问下,这是什么原因,谢谢各位大佬。

1079 3 1
3个回答

xiuwang

使用linux系统,并开启reusePort 。
提示 macOS 不支持reusePort,反正我macOS测试reusePort没效果。

  • 暂无评论
jianqi

认真看手册噢,代码里不可以使用sleep exit die 等

  • tianya 2023-03-08

    加sleep就是为了模拟一下阻塞的等待时间,想着已经多进程了,那sleep应该不影响其他几个进程同时接待的...

ersic

调度问题吧
重启,发完请求执行 php webman status
看每个进程处理的情况

  • tianya 2023-03-08

    嗯,是调度问题。status看了,空闲的比较闲,大部分请求都集中在几个进程内,看了文档和其他几个同类的问答帖,具体原因应该是webman不会平均分配进程,切换进程也有性能消耗,所以就集中在几个进程内处理了。我按照作者大大说的reusePort 设置为ture来平均分配,但看status结果来说,和没开启时的结果大差不差,大量并发时还是比较集中在某几个进程内。

  • ersic 2023-03-08

    应该是你sleep的原因,我做ab测试的时候,感觉分布还挺均匀的。

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