通过strace 跟踪进程
看起来是惊群现象,是正常的。 可以在 config/server.php 中设置 'reusePort' => true,避免惊群。需要restart重启生效。
谢谢!
什么是惊群 ?
惊群效应就是当一个fd的事件被触发时,所有等待这个fd的线程或进程都被唤醒。
一般都是socket的accept()会导致惊群(当然也可以弄成一堆线程/进程阻塞read一个fd),很多个进程都block在server socket的accept(),一但有客户端进来,所有进程的accept()都会返回,但是只有一个进程会读到数据,就是惊群。实际上现在的Linux内核实现中不会出现惊群了,只会有一个进程被唤醒(Linux2.6内核)。
GatewayWorker 的惊群有办法解决吗?
一样,$gateway->reusePort=true
业务worker BusinessWorker 需要设置这个参数吗?
BusinessWorker本身不监听端口,不需要
好的,感谢,已经解决。
BusinessWorker 套接字有会大量的 alarm(30) 和 alarm()。这个表示什么?大量的这个会不会是业务代码引起的问题
alarm(30)
alarm()
不用管,没有问题
好的
看起来是惊群现象,是正常的。
可以在 config/server.php 中设置 'reusePort' => true,避免惊群。需要restart重启生效。
谢谢!
惊群效应就是当一个fd的事件被触发时,所有等待这个fd的线程或进程都被唤醒。
一般都是socket的accept()会导致惊群(当然也可以弄成一堆线程/进程阻塞read一个fd),很多个进程都block在server socket的accept(),一但有客户端进来,所有进程的accept()都会返回,但是只有一个进程会读到数据,就是惊群。实际上现在的Linux内核实现中不会出现惊群了,只会有一个进程被唤醒(Linux2.6内核)。
GatewayWorker 的惊群有办法解决吗?
一样,$gateway->reusePort=true
业务worker BusinessWorker 需要设置这个参数吗?
BusinessWorker本身不监听端口,不需要
好的,感谢,已经解决。
不用管,没有问题
好的