nginx反向代理webman偶尔会出现104: Connection reset by peer

learner

问题描述

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,

截图报错信息里报错文件相关代码

截图

操作系统及workerman/webman等框架组件具体版本

webman v1.6.14 / workerman v5.0.0
linux php 安装 php8.3 event扩展

87 1 0
1个回答

Connection reset by peer 一般是进程退出导致,从提供的信息中看不出来是哪里导致的退出,可以先把monitor关闭试下。
进程收到重启信号会先处理业务,然后才关闭。但是有一些极端情况,例如业务执行慢,被强制推退出。进程当前没有处理请求,但是退出的时候刚好有请求发给当前进程。这些都会导致 Connection reset by peer

  • learner 3天前

    感谢。后面把内存限制提高,就没有了。之前设置太低触发关闭频率太高了。

  • learner 13小时前

    但是如果应对一些极端情况。想退出子进程。同时就得取消请求的分配。处理完当前请求。再结束。这样才完整不是?毕竟不能因为小概率,而不去完整处理流程吧。

  • walkor 12小时前

    极端情况不是能100%避免的,否则不叫极端情况了。例如业务就是很耗时,不可能无限等待,这时候kill掉进程就
    Connection reset by peer了。
    再比如服务端已经处理完当前收到的请求,但是服务端关闭进程那个时刻刚好有新的请求网络传输的路上,进程退出也会 Connection reset by peer
    没有取消请求分配的说法,客户端连接连到A进程,那么这个连接的所有请求都会分配给A进程。连接关闭或者A进程退出,那么连接上所有传输中的请求都会丢失,然后 Connection reset by peer

×
🔝