跟踪webman http进程存在大量的 11:22:10.603415 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout) 是否正常

Tinywan

通过strace 跟踪进程

1532 4 0
4个回答

walkor

看起来是惊群现象,是正常的。
可以在 config/server.php 中设置 'reusePort' => true,避免惊群。需要restart重启生效。

Tinywan

什么是惊群 ?

惊群效应就是当一个fd的事件被触发时,所有等待这个fd的线程或进程都被唤醒。

一般都是socket的accept()会导致惊群(当然也可以弄成一堆线程/进程阻塞read一个fd),很多个进程都block在server socket的accept(),一但有客户端进来,所有进程的accept()都会返回,但是只有一个进程会读到数据,就是惊群。实际上现在的Linux内核实现中不会出现惊群了,只会有一个进程被唤醒(Linux2.6内核)。

  • 暂无评论
Tinywan

GatewayWorker 的惊群有办法解决吗?

截图

  • walkor 2022-01-12

    一样,$gateway->reusePort=true

  • Tinywan 2022-01-12

    业务worker BusinessWorker 需要设置这个参数吗?

  • walkor 2022-01-12

    BusinessWorker本身不监听端口,不需要

  • Tinywan 2022-01-12

    好的,感谢,已经解决。

Tinywan

BusinessWorker 套接字有会大量的 alarm(30)alarm()。这个表示什么?大量的这个会不会是业务代码引起的问题

截图

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