nginx反向代理webman偶尔会出现
出现的很有规律。猜测跟monitor关闭内存超出的子进程有关。怎么解决。不应该先取消处理,再关闭进程吗?
if (preg_match('/VmRSS\s*?:\s*?(\d+?)\s*?kB/', $status, $match)) {
$mem = $match[1];
}
$mem = (int) ($mem / 1024);
if ($mem >= $memoryLimit) {
posix_kill($pid, SIGINT);
}
recv() failed (104: Connection reset by peer) while reading response header from upstream,
webman v1.6.14 / workerman v5.0.0
linux php 安装 php8.3 event扩展
Connection reset by peer 一般是进程退出导致,从提供的信息中看不出来是哪里导致的退出,可以先把monitor关闭试下。
进程收到重启信号会先处理业务,然后才关闭。但是有一些极端情况,例如业务执行慢,被强制推退出。进程当前没有处理请求,但是退出的时候刚好有请求发给当前进程。这些都会导致 Connection reset by peer
感谢。后面把内存限制提高,就没有了。之前设置太低触发关闭频率太高了。
但是如果应对一些极端情况。想退出子进程。同时就得取消请求的分配。处理完当前请求。再结束。这样才完整不是?毕竟不能因为小概率,而不去完整处理流程吧。
极端情况不是能100%避免的,否则不叫极端情况了。例如业务就是很耗时,不可能无限等待,这时候kill掉进程就
Connection reset by peer
了。再比如服务端已经处理完当前收到的请求,但是服务端关闭进程那个时刻刚好有新的请求网络传输的路上,进程退出也会
Connection reset by peer
。没有取消请求分配的说法,客户端连接连到A进程,那么这个连接的所有请求都会分配给A进程。连接关闭或者A进程退出,那么连接上所有传输中的请求都会丢失,然后
Connection reset by peer