服务在 kubernetes pod 上运行,并且突然出现并且没有任何特定原因,它会断断续续地发生:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
req = six.next(parser)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 181, in __init__
super(Request, self).__init__(cfg, unreader)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 54, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 230, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 74, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
[2018-11-04 17:57:55 +0330] [31] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
req = six.next(parser)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 181, in __init__
super(Request, self).__init__(cfg, unreader)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 54, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 230, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", line 74, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
在你的 pod 中,gunicorn 上游有什么有趣的东西,比如反向代理,nginx?
不,没有代理,没有 nginx
我遇到了完全相同的问题:confused:
在上游,我们有 HAProxy 及其 HTTP 日志格式,断开连接时的会话状态(参见 http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#8.5)它将这些错误记录为CH--
含义:
所以,如果我理解正确,客户端关闭了连接,而 gunicorn 仍在发送响应。
任何导致客户端中止的线索? 等待 gunicorn 发送完整响应标头是否需要很长时间?
@javabrett似乎不是这样,至少在我查找的少数日志消息中,它主要是图像或其他资产,因此应该不会花费太多时间。
客户端可能已关闭浏览器或任何其他会突然关闭连接的操作? :思考:
@gforcada您是否使用带有 haproxy 的代理协议?
@benoitc不是我所知道的
有没有人用这个? 除了完全相同的错误之外,我没有太多贡献。
我的配置包含一个负载均衡器,用于终止 SSL 并将请求转发到在 docker 容器中运行的 django 应用程序。 我不确定 LB 是用什么实现的——它是一个数字海洋产品。
我相当确定它与负载均衡器有关,因为我在另一个不在 LB 后面的容器中运行了相同的应用程序,并且它从未遇到过这个问题。
关于根本原因以及如何预防的任何想法?
我想知道这里是否有任何操作。 如果这是常规的客户端断开连接,我们可能会忽略错误并可能在访问日志中记录断开连接,否则我不知道该怎么做。
我刚刚遇到了同样的错误,导致我们的监控网络服务器崩溃:
[2019-06-10 11:38:25 +0200] [27989] [CRITICAL] WORKER TIMEOUT (pid:17906)
[2019-06-10 11:38:25 +0200] [17906] [INFO] Worker exiting (pid: 17906)
[2019-06-10 11:38:25 +0200] [17924] [INFO] Booting worker with pid: 17924
[2019-06-10 11:38:37 +0200] [17922] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
req = six.next(parser)
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/http/message.py", line 181, in __init__
super(Request, self).__init__(cfg, unreader)
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/http/message.py", line 54, in __init__
unused = self.parse(self.unreader)
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/http/message.py", line 230, in parse
self.headers = self.parse_headers(data[:idx])
File "/home/off1user/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gunicorn/http/message.py", line 74, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
[2019-06-10 11:38:47 +0200] [27989] [CRITICAL] WORKER TIMEOUT (pid:17920)
[2019-06-10 11:38:47 +0200] [17920] [INFO] Worker exiting (pid: 17920)
我与运行 docker image dpage/pgadmin4:4.2 的 pod 相同
OSError: [Errno 107] 套接字未连接
[2019-06-14 12:20:32 +0000] [77] [ERROR] Socket 错误处理请求。
回溯(最近一次调用最后一次):
文件“/usr/local/lib/python3.6/site-packages/gunicorn/workers/gthread.py”,第274行,句柄
req = Six.next(conn.parser)
文件“/usr/local/lib/python3.6/site-packages/gunicorn/http/parser.py”,第41行,在__next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
文件“/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py”,第181行,在__init__
super(Request, self).__init__(cfg, unreader)
文件“/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py”,第 54 行,在 __init__
未使用 = self.parse(self.unreader)
解析中的文件“/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py”,第 230 行
self.headers = self.parse_headers(data[:idx])
文件“/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py”,第 74 行,在 parse_headers
remote_addr = self.unreader.sock.getpeername()
看起来非常类似于: https :
我在托管的 Google Cloud Run 上偶尔会收到此错误。 以下是我们容器定义的简化版本:
FROM ubuntu:18.04
ENV APP_HOME /app
WORKDIR $APP_HOME
RUN apt-get update \
&& apt-get install --no-install-recommends -y python3 python3-pip \
&& rm -rf /var/lib/apt/lists/*
RUN pip3 install --compile --no-cache-dir --upgrade pip setuptools
RUN mkdir invoice_processing && \
pip install --compile --disable-pip-version-check --no-cache-dir flask gunicorn
COPY app.py ./
CMD exec gunicorn --bind :$PORT --workers 1 --threads 1 app:app
Stackdriver 显示以下堆栈跟踪:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/base.py", line 134, in init_process
self.run()
File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/sync.py", line 124, in run
self.run_for_one(timeout)
File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/sync.py", line 68, in run_for_one
self.accept(listener)
File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/sync.py", line 27, in accept
client, addr = listener.accept()
File "/usr/lib/python3.6/socket.py", line 205, in accept
fd, addr = self._accept()
OSError: [Errno 107] Transport endpoint is not connected
与此处的 OP 相同的问题。 使用谷歌云平台、Python 3.7、gunicorn 19.9.0
Traceback (most recent call last):
File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
req = six.next(parser)
File "/env/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", line 181, in __init__
super(Request, self).__init__(cfg, unreader)
File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", line 54, in __init__
unused = self.parse(self.unreader)
File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", line 230, in parse
self.headers = self.parse_headers(data[:idx])
File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", line 74, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
timestamp: "2019-07-30T15:23:55.435130Z"
我也有同样的问题😕
与 GAEfan 完全相同的问题。 在 App Engine 标准环境中使用 Python 3.7 运行 Flask 应用程序。
同样的问题在这里
我在 Google App Engine 中使用 Python 3.7 运行 Django 应用程序时遇到了同样的问题。
回溯(最近一次调用):文件“/env/lib/python3.7/site-packages/gunicorn/workers/sync.py”,第 134 行,在句柄 req = Six.next(parser) 文件“/env/ lib/python3.7/site-packages/gunicorn/http/parser.py”,第 41 行,在 __next__ self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count) 文件“/env/lib /python3.7/site-packages/gunicorn/http/message.py”,第 181 行,在 __init__ super(Request, self).__init__(cfg, unreader) 文件“/env/lib/python3.7/site-packages /gunicorn/http/message.py”,第 54 行,在 __init__ 未使用 = self.parse(self.unreader) 文件“/env/lib/python3.7/site-packages/gunicorn/http/message.py”中,行230,在解析 self.headers = self.parse_headers(data[:idx]) 文件“/env/lib/python3.7/site-packages/gunicorn/http/message.py”,第 74 行,在 parse_headers remote_addr = self .unreader.sock.getpeername() OSError: [Errno 107] 传输端点未连接
运行 GAE python 3.7 gunicorn 和 fastapi/uvicorn 的相同问题。
同样的问题谷歌云运行
我们在谈论哪种请求?
谷歌应用引擎中的同样问题。 POST 请求。 发生不一致。 烧瓶应用程序。 @benoitc请让我知道哪些信息有用,我可以发布。
同样的问题,Google App Engine,POST 请求,Flask 应用程序。 当我更改为自定义入口点代码而不是让默认入口点代码时,它似乎已经开始。 自定义入口点如下(在 Google App Engine 中,您将其设置在 app.yaml 文件中):
gunicorn -b :$PORT --timeout 1200 server.main:app
默认入口点没有设置任何东西(虽然不知道什么用作默认入口点)。
不确定它是否因此而开始,但是当我进行此更改(以及其他更改)时,我注意到了这一点。
不,没有代理,没有 nginx
我使用的是gunicorn
而没有nginx
。 我遇到了同样的问题。 我的设置在Openshift
。
gunicorn --chdir /src/app wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 180 -k gevent
问题站
同样的问题,Google App Engine,POST 请求,Flask 应用程序。 当我更改为自定义入口点代码而不是让默认入口点代码时,它似乎已经开始。 自定义入口点如下(在 Google App Engine 中,您将其设置在 app.yaml 文件中):
gunicorn -b :$PORT --timeout 1200 server.main:app
默认入口点没有设置任何东西(虽然不知道什么用作默认入口点)。
不确定它是否因此而开始,但是当我进行此更改(以及其他更改)时,我注意到了这一点。
你说的入口点是什么意思? 你能发布一个调试日志和请求的完成方式吗? (原始 http 会有所帮助)
问题站
同样的问题,Google App Engine,POST 请求,Flask 应用程序。 当我更改为自定义入口点代码而不是让默认入口点代码时,它似乎已经开始。 自定义入口点如下(在 Google App Engine 中,您将其设置在 app.yaml 文件中):
gunicorn -b :$PORT --timeout 1200 server.main:app
默认入口点没有设置任何东西(虽然不知道什么用作默认入口点)。
不确定它是否因此而开始,但是当我进行此更改(以及其他更改)时,我注意到了这一点。你说的入口点是什么意思? 你能发布一个调试日志和请求的完成方式吗? (原始 http 会有所帮助)
我认为他指的是您明确指定了 _gunicorn_ 应该导入查找和运行的app
路径,就像他示例中的server.main:app
。
LE:也许这里更新的例子有帮助: https :
首先, @benoitc谢谢。 你的工作很棒。
我在 Google Cloud Run w/gunicorn 上也遇到了同样的问题。 我正在发布我拥有的内容,尽管它可能不是唯一的,请仔细阅读以上内容。 我在 Docker 容器中使用 Gunicorn 作为服务器(并且没有代理)运行 Flask 应用程序。
回溯(来自 GC 控制台):
File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 104, in init_process
super(ThreadWorker, self).init_process()
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 134, in init_process
self.run()
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 211, in run
callback(key.fileobj)
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 127, in accept
sock, client = listener.accept()
File "/usr/local/lib/python3.7/socket.py", line 212, in accept
fd, addr = self._accept()
OSError: [Errno 107] Transport endpoint is not connected
谷歌对上述内容的解析输出:
OSError: [Errno 107] Transport endpoint is not connected
at accept (/usr/local/lib/python3.7/socket.py:212)
at accept (/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py:127)
at run (/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py:211)
at init_process (/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py:134)
at init_process (/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py:104)
at spawn_worker (/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py:583)
如果还有什么我可以提供或帮助的地方,请告诉我。
欢迎 PR 为所有工人优雅地处理ENOTCONN
。 如果你开始研究这个,请在这里发帖,我很乐意审查 PR。 我相信这个线程上的一些人会很乐意帮助测试一个分支。
同样的问题,Google App Engine,gunicorn 为 Django 应用提供服务,一小部分请求会像这样消失:
entrypoint: gunicorn -b :$PORT wsgi_api:application
欢迎 PR 为所有工人优雅地处理
ENOTCONN
。 如果你开始研究这个,请在这里发帖,我很乐意审查 PR。 我相信这个线程上的一些人会很乐意帮助测试一个分支。
我是这个线程中的一员,很乐意帮助测试,所以如果我能提供帮助,请联系我。
欢迎 PR 为所有工人优雅地处理
ENOTCONN
。 如果你开始研究这个,请在这里发帖,我很乐意审查 PR。 我相信这个线程上的一些人会很乐意帮助测试一个分支。我是这个线程中的一员,很乐意帮助测试,所以如果我能提供帮助,请联系我。
我很乐意帮助测试 PR。 如果需要任何帮助,请ping我。
我很乐意帮助测试 PR。 如果需要任何帮助,请ping我。
欢迎 PR 为所有工人优雅地处理
ENOTCONN
。 如果你开始研究这个,请在这里发帖,我很乐意审查 PR。 我相信这个线程上的一些人会很乐意帮助测试一个分支。
此问题的根本原因是gunicorn==19.9.0
最新版本。 我被转移到使用旧版本的gunicorn==19.7.1
。 我能够毫无问题地运行。 请尝试使用旧版本。
而是尝试最后的主人。 20.0 今天终于来了
您的健康检查端点看起来如何? 你如何回应它,你是否正在关闭连接? 你设置长度标题和co吗? 我不确定为什么要通过邮寄进行健康检查。 听起来很奇怪...
@cmin764 fflask是否设置了一些默认标头? 我会尝试,但如果回复看起来会很有趣
@benoitc当我使用gunicorn==19.9.0
端点健康检查时真的很糟糕。 数据库连接等待的时间较长。 应用程序的整个加载过程都停止了。
较旧的gunicorn==19.7.1
端点正在破坏端点健康检查看起来不错。 我没有关闭任何连接,也没有设置标题的长度。
我还将测试最新版本 20.0.0。
不,没有代理,没有 nginx
我使用的是
gunicorn
而没有nginx
。 我遇到了同样的问题。 我的设置在Openshift
。
gunicorn --chdir /src/app wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 180 -k gevent
使用旧版本 gunicorn=19.7.1 I was not able to run with the
gevent`。 我改变了我的 gunicorn 命令
gunicorn apps.wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 180
我正在查看自此版本以来的更改,以查看是否有任何原因。 感谢您的反馈!
使用 19.7.1(从最新版本降级)在谷歌应用引擎环境中工作,推送队列为工作人员提供食物,工作人员通过 http 相互交谈。
使用 19.7.1(从最新版本降级)在谷歌应用引擎环境中工作,推送队列为工作人员提供食物,工作人员通过 http 相互交谈。
这是我的用例。 我会试一试。
你试过最新版本吗?
在 Openshift 上尝试了最新的 20.0.0(openshift v3.11.135,kubernetes v1.11.0) - 发生同样的错误。 我观察到的错误是在更高的负载下触发的(运行 20 个并行工作器的集成测试)。 增加 Pod 的数量可以减少错误的发生,而保留单个 Pod 的结果是有保证的错误。 这是 3 个同步工作者配置。 19.7.1 仅在 pod 日志上没有显示错误,但外部消费者在连接时遇到与最新版本相同的意外 EOF。 所以降级版本无济于事。
2019-11-12 16:08:56,982 ERROR gunicorn.error glogging 277 glogging.py 套接字错误处理请求。
回溯(最近一次调用最后一次):
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py”,行
134,在手柄
req = Six.next(解析器)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/parser.py”,第41行,在__next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第181行,在__init__
super(Request, self).__init__(cfg, unreader)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 54 行,在 __init__
未使用 = self.parse(self.unreader)
解析中的文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 230 行
self.headers = self.parse_headers(data[:idx])
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 74 行,在 parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] 传输端点未连接
在 Openshift 上尝试了最新的 20.0.0(openshift v3.11.135,kubernetes v1.11.0) - 发生同样的错误。 我观察到的错误是在更高的负载下触发的(运行 20 个并行工作器的集成测试)。 增加 Pod 的数量可以减少错误的发生,而保留单个 Pod 的结果是有保证的错误。 这是 3 个同步工作者配置。 19.7.1 仅在 pod 日志上没有显示错误,但外部消费者在连接时遇到与最新版本相同的意外 EOF。 所以降级版本无济于事。
2019-11-12 16:08:56,982 ERROR gunicorn.error glogging 277 glogging.py 套接字错误处理请求。
回溯(最近一次调用最后一次):
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py”,行
134,在手柄
req = Six.next(解析器)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/parser.py”,第41行,在next
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 181 行,在init 中
超级(请求,自我)。 init (cfg, unreader)
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 54 行,在init 中
未使用 = self.parse(self.unreader)
解析中的文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 230 行
self.headers = self.parse_headers(data[:idx])
文件“/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py”,第 74 行,在 parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] 传输端点未连接
您可以尝试增加路由器超时。
您可以尝试增加路由器超时。
根据这一线索,我们发现了问题:Openshift 就绪探针设置过于乐观(应用程序对某些请求花费了太长时间),并且在失败时外部负载均衡器 (AVI) 接收到此事件并将 pod 踢出负载均衡池。
我最近在使用 gunicorn=19.9.0 时遇到了这个问题。 重启解决了这个问题。 我部署在 Google Kubernetes Engine 上。 该应用程序是一个烧瓶应用程序 -
条目:
command: ["sh", "-c", "gunicorn -b 0.0.0.0:$${PORT} -c gunicorn_config.py run:app"]
配置:
worker_temp_dir = '/dev/shm'
worker_class = 'gthread'
worker = 2
threads = 2
worker_connections = 1000
timeout = 180
keepalive = 2
backlog = 2048
accesslog = '-'
errorlog = '-'
错误:
Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/gthread.py", line 274, in handle req = six.next(conn.parser) File "/usr/local/lib/python2.7/site-packages/gunicorn/http/parser.py", line 41, in __next__ self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count) File "/usr/local/lib/python2.7/site-packages/gunicorn/http/message.py", line 181, in __init__ super(Request, self).__init__(cfg, unreader) File "/usr/local/lib/python2.7/site-packages/gunicorn/http/message.py", line 54, in __init__ unused = self.parse(self.unreader) File "/usr/local/lib/python2.7/site-packages/gunicorn/http/message.py", line 230, in parse self.headers = self.parse_headers(data[:idx]) File "/usr/local/lib/python2.7/site-packages/gunicorn/http/message.py", line 74, in parse_headers remote_addr = self.unreader.sock.getpeername() File "/usr/local/lib/python2.7/socket.py", line 228, in meth return getattr(self._sock,name)(*args) error: [Errno 107] Transport endpoint is not connected
当前的解决方案是降级到19.7.1
吗?
任何人都可以与我可以用来重现问题的部署说明共享存储库吗? 我很高兴研究它,但我想确保我确切地知道如何设置它。
嗨@tilgovi Fastapi 在生产中使用 gunicorn。
此存储库具有最小版本并显示相同的错误。 您可以尝试,我在 App Engine 上遇到过这个错误,我不知道它是否会在其他环境中复制。 那个存储库,它可以帮助重现问题吗?
同样的问题在这里:
gunicorn 19.9.0 + GKE 在我们处理高负载时也发生了。
厘米
不确定,但现在一切似乎恢复正常。
这是我的 app.yaml
runtime: python37
entrypoint: gunicorn -b :$PORT truestory:app
handlers:
- url: /static
static_dir: truestory/static
- url: /favicon\.ico
static_files: truestory/static/img/favicon.ico
upload: truestory/static/img/favicon\.ico
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
和 Makefile 的生产运行:
run: export FLASK_CONFIG = production
run:
# Run main server in production mode with Gunicorn (remote database).
<strong i="12">@echo</strong> "[i] Starting server with Gunicorn."
gunicorn -b :$(PORT) truestory:app
所以也许这在 GAE 上是暂时的。
我有同样的问题。 带有 gevent 的 Gunicorn,前面只是一个 Google HTTP LB。 (没有 Nginx 或其他反向代理)。 东西可以正常工作数周,但偶尔我会得到:
Traceback (most recent call last):
File "XXX/gunicorn/workers/base_async.py", line 65, in handle
util.reraise(*sys.exc_info())
File "XXX/gunicorn/util.py", line 625, in reraise
raise value
File "XXX/gunicorn/workers/base_async.py", line 48, in handle
req = next(parser)
File "XXX/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "XXX/gunicorn/http/message.py", line 186, in __init__
super().__init__(cfg, unreader)
File "XXX/gunicorn/http/message.py", line 53, in __init__
unused = self.parse(self.unreader)
File "XXX/gunicorn/http/message.py", line 235, in parse
self.headers = self.parse_headers(data[:idx])
File "XXX/gunicorn/http/message.py", line 73, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
独角兽 20.0.4。
事实上,有几个人报告说他“在高负荷下发生”,或者在我的情况下,这种事情“每月发生几次”,这看起来像是某种竞赛条件。
@JordanP你在谷歌方面有什么错误吗? 如何从 Google LB 发送 ping? 谷歌LB端是否超时?
它在 Kubernetes 中运行,健康检查是 HTTP 的,非常保守(超时 5 秒,在标记容器死亡之前连续 10 次失败)。
在 Google 方面,Gunicorn 前面的 HTTP LB 返回了超过 40k 502 错误(在几分钟内),原因如下:“backend_timeout”:
我得到了 4 个副本(4 个容器),它们都在那天晚上的同一时间崩溃了。 所以,这是一个疯狂的猜测,但也许谷歌不得不重新启动他们的负载均衡器来部署一个新版本,一个修复程序,无论如何,毕竟都是软件,所以客户端(如 Gunicom 所见)可能在不友好/不-预期的方式。 无论如何,Gunicorn 应该能够适应客户发生的任何情况。
忽略 ENOTCONN 看起来还不错,有人讨论过直接在 Python stdlib 的某些模块中执行此操作,对于某些操作: https :
同样的错误。
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
req = six.next(parser)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 181, in __init__
super(Request, self).__init__(cfg, unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 54, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 230, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 74, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
在单独的 docker 容器中的两个 Flask 应用程序(api 和 interface),每个应用程序都运行 gunicorn。 当我通过界面应用程序中的表单发布到 api 时,错误发生在 Chrome/Chromium(不是 firefox)中。 它可能连接到 Chrome 的抢占式 TCP 连接。 由于nginx应该能够处理这些,所以我把它放在了容器前面。 什么都改变。
@uree哪个工人? 你如何发射 gunicorn?
在 Digital Ocean 上使用带有 docker-compose 的 gunicorn 运行 django 时,我看到了同样的问题。
Gunicorn 20.0.4 版本
version: '3.7'
services:
backend:
build: .
command: gunicorn --workers=2 --thread=2 --log-file=- --certfile=/etc/nginx/ssl/xxx.crt --keyfile=/etc/nginx/ssl/xxx.key backend.config.wsgi:application --bind 0.0.0.0:8000
restart: unless-stopped
volumes:
- .:/usr/src/app/
- ../media:/backend/media
- /root/certs/:/etc/nginx/ssl/
ports:
- 8000:8000
env_file:
- ./.env.dev
environment:
- Debug=True
# - GUNICORN_WORKERS=2
# - GUNICORN_ERRORLOG=-
# - GUNICORN_THREADS=4
# - GUNICORN_ACCESSLOG=-
depends_on:
- db
db:
image: postgres:12.0-alpine
restart: unless-stopped
volumes:
- ../postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=xxxx
- POSTGRES_PASSWORD=xxxx
- POSTGRES_DB=archlink
frontend:
build: ./frontend
volumes:
- ./frontend:/app
- /app/node_modules
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- BACKEND_URL=http://142.93.235.130:8000/
depends_on:
- backend
# command: npm start
nginx:
image: nginx:latest
restart: unless-stopped
volumes:
- ./nginx/nginx-proxy.conf:/etc/nginx/conf.d/default.conf:ro
- ./frontend/build:/var/www/frontend # maps frontend build inside nginx
- /root/certs/:/etc/nginx/ssl/
ports:
- 80:8080
- 443:443
depends_on:
- frontend
此错误每 4-5 分钟发生一次:
backend_1 | [2020-03-04 12:05:58 +0000] [18] [ERROR] Socket error processing request.
backend_1 | Traceback (most recent call last):
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/gthread.py", line 266, in handle
backend_1 | req = next(conn.parser)
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/parser.py", line 41, in __next__
backend_1 | self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 186, in __init__
backend_1 | super().__init__(cfg, unreader)
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 53, in __init__
backend_1 | unused = self.parse(self.unreader)
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 198, in parse
backend_1 | self.get_data(unreader, buf, stop=True)
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 189, in get_data
backend_1 | data = unreader.read()
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/unreader.py", line 37, in read
backend_1 | d = self.chunk()
backend_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/http/unreader.py", line 64, in chunk
backend_1 | return self.sock.recv(self.mxchunk)
backend_1 | File "/usr/local/lib/python3.8/ssl.py", line 1226, in recv
backend_1 | return self.read(buflen)
backend_1 | File "/usr/local/lib/python3.8/ssl.py", line 1101, in read
backend_1 | return self._sslobj.read(len)
backend_1 | OSError: [Errno 0] Error
同样的错误。
Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle req = six.next(parser) File "/usr/local/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__ self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count) File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 181, in __init__ super(Request, self).__init__(cfg, unreader) File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 54, in __init__ unused = self.parse(self.unreader) File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 230, in parse self.headers = self.parse_headers(data[:idx]) File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 74, in parse_headers remote_addr = self.unreader.sock.getpeername() OSError: [Errno 107] Transport endpoint is not connected
在单独的 docker 容器中的两个 Flask 应用程序(api 和 interface),每个应用程序都运行 gunicorn。 当我通过界面应用程序中的表单发布到 api 时,错误发生在 Chrome/Chromium(不是 firefox)中。 它可能连接到 Chrome 的抢占式 TCP 连接。 由于nginx应该能够处理这些,所以我把它放在了容器前面。 什么都改变。
更新就我而言,问题出在别处。 它是由提交按钮上的 onclick jquery 事件引起的。 我不得不用ajax异步发布来解决这个问题。
此错误有任何更新吗?
此错误有任何更新吗?
你能描述一下它发生的背景吗? 此外,对于所有使用 kubernetes 的情况,您能否描述一下您的健康检查是如何配置的,以便我们能够重现它?
是什么让人们认为它与 Kubernetes 相关? 没有行为不端的客户端,半关闭的连接应该让 Gunicorn 工人完全崩溃,无论它是在 Kubernetes、Mesos、docker 还是裸机中运行:Gunicorn 最有弹性。
我还没有找到一个可靠/简单的复制器,但如果我找到了,我想我可能会崩溃每个直接暴露在互联网上的 gunicorn 网络服务器。
好吧,当 gunicorn 落后于 nginx 并且一些发布时,我从未发生过这样的崩溃
报道那里似乎与kubernetes有关。
它发生在哪个工人身上? 在代理后面使用 gunicorn 吗? 哪个
一个?
在 2020 年 3 月 10 日星期二 11:52 Jordan Pittier [email protected]写道:
是什么让人们认为它与 Kubernetes 相关? 没有行为不端的客户,一半
关闭的连接应该让 Gunicorn 工人完全崩溃,无论是
它在 Kubernetes、Mesos、docker、baremetal 中运行:Gunicorn most be
有弹性。我还没有找到可靠/简单的复制器,但如果我找到了,我想我可能是
能够使直接暴露于网络的每一个 gunicorn 网络服务器崩溃
互联网。—
你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/benoitc/gunicorn/issues/1913?email_source=notifications&email_token=AAADRITYFZI4GINCSG752OTRGYLXDA5CNFSM4GBYQQA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63DNMVXWZ9L0500000000000000000004GINCSG752OTRGYLXDA5CNFSM4GBYQQA2YY3PNVWWK3
或取消订阅
https://github.com/notifications/unsubscribe-auth/AAADRIRSO4T7WQTS6GMHLO3RGYLXDANCNFSM4GBYQQAQ
.>
从我的手机发送
aws 负载均衡器后面的 aws ecs 服务也有同样的错误。
在所有副本(容器/任务)上同时发生一次
Gunicorn 作为 pip 包。 没有 Nginx,没有代理。
蟒蛇 3.7.6
独角兽版本:20.0.4
像这样运行:
gunicorn
--bind 0.0.0.0:8000
--workers 1
--threads 5
--max-requests 100
--timeout 300
application.wsgi
日志:
[2020-03-10 22:28:38 +0100] [105] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 266, in handle
req = next(conn.parser)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__
22:28:37.814 WARNING [django.request:log_response #228] Not Found: /443
22:28:36.176 WARNING [django.request:log_response #228] Not Found: /443
[2020-03-10 22:28:35 +0100] [105] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 266, in handle
req = next(conn.parser)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 186, in __init__
super().__init__(cfg, unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 53, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 235, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 73, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
[2020-03-10 22:28:35 +0100] [105] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 266, in handle
req = next(conn.parser)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 186, in __init__
super().__init__(cfg, unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 53, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 235, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/message.py", line 73, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
此错误有任何更新吗?
你能描述一下它发生的背景吗? 此外,对于所有使用 kubernetes 的情况,您能否描述一下您的健康检查是如何配置的,以便我们能够重现它?
我没有什么具体的。 错误突然发生,没有发生导致此错误的明显操作。
在 django 应用程序中,除了常规 REST API 端点之外,还有一个 django 作业调度程序。 您可以在 docker-compose.yml 中看到的所有其他内容。
我可以提供更多的数据。 我偶尔会看到 gunicorn 19.9.0 作为反向代理在 haproxy 后面运行(仅使用 HTTP,而不使用PROXY
协议)。
Mar 17 21:38:07 redacted.com gunicorn[25470]: https://redacted.com/redacted[2020-03-17 21:38:07 +0000] [25495] [ERROR] Socket error processing request.
Mar 17 21:38:07 redacted.com gunicorn[25470]: Traceback (most recent call last):
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
Mar 17 21:38:07 redacted.com gunicorn[25470]: req = six.next(parser)
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/http/parser.py", line 41, in __next__
Mar 17 21:38:07 redacted.com gunicorn[25470]: self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/http/message.py", line 181, in __init__
Mar 17 21:38:07 redacted.com gunicorn[25470]: super(Request, self).__init__(cfg, unreader)
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/http/message.py", line 54, in __init__
Mar 17 21:38:07 redacted.com gunicorn[25470]: unused = self.parse(self.unreader)
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/http/message.py", line 230, in parse
Mar 17 21:38:07 redacted.com gunicorn[25470]: self.headers = self.parse_headers(data[:idx])
Mar 17 21:38:07 redacted.com gunicorn[25470]: File "/var/venvs/software-venv/lib/python3.6/site-packages/gunicorn/http/message.py", line 74, in parse_headers
Mar 17 21:38:07 redacted.com gunicorn[25470]: remote_addr = self.unreader.sock.getpeername()
Mar 17 21:38:07 redacted.com gunicorn[25470]: OSError: [Errno 107] Transport endpoint is not connected
服务器当时每秒处理大约 30 个请求。 如您所见,第一个日志行被破坏,大概是由于缓冲输出和多个工作人员。
Gunicorn 与 systemd 一起运行: ExecStart=/var/venvs/software-venv/bin/gunicorn -b 0.0.0.0:6000 -w 4 app:app
和LimitNOFILE=49152
。
我发送了一个包含修复的拉取请求,我已经在生产中运行了几天。 该错误是由竞争条件引起的,在调用getpeername()
之前可以关闭套接字(由客户端、操作系统等),因此它正确地引发了异常。 然而,gunicorn 没有捕捉到这个异常,所以它会冒泡并导致服务器崩溃。 我的修复只是捕获异常并将其作为 NoMoreData 异常引发,该异常已经由堆栈中的其他代码处理。 这可以防止不合时宜的断开连接导致服务器崩溃。
我正在使用 Kubernetes(1.16.8-gke.15) 和最新的 Gunicorn (20.0.4) 和 Python 3.7。 如果我发出 POST 请求并为每次迭代增加从 1 秒开始的时间延迟,它会在延迟为 360 秒时停止工作。 Gunicorn 里面的工作完成了,几分钟后它返回这个错误:
Socket error processing request.
OSError: [Errno 107] Transport endpoint is not connected
当 Kubernetes 和 Gunicorn 之间的连接断开时,Kubernetes 端点和客户端仍然连接。 运行状况检查看起来不错,但它们可能以某种方式配置错误。 我还没有在 Kubernetes 端找到任何日志来识别问题。
我对 Gunicorn (19.7.1) 的结果相同。
我已经为 Gunicorn添加了超时标志,并且我正在使用默认的 GKE Loadbalancer 和添加注释来处理任何超时。 Gunicorn 命令:
gunicorn --bind="0.0.0.0:5000" --workers=1 --timeout=1200 --keep-alive=1200 main:app
当我在没有任何东西的情况下在本地运行 Gunicorn 时,它工作正常。 这可能更像是Kubernetes 问题,但是,响应丢失了。
有没有人有这个问题的运气? 或者有什么好的调试方法?
Docker 版本 19.03.8,构建 afacb8b7f0
Python 3.8.2(默认,2020 年 2 月 26 日,15:09:34)
[GCC 8.3.0] 在 Linux 上
import multiprocessing
import os
bind = '0.0.0.0:8889'
max_requests = 100000
timeout = 60
graceful_timeout = 60
if os.environ.get('WEB_WORKERS') is None:
_cpu_count = multiprocessing.cpu_count()
workers = 2 * _cpu_count + 1
else:
workers = int(os.environ['WEB_WORKERS'])
limit_request_line = 4094 * 4 # 4x then default val
errorlog = '/var/log/krapi/gunicorn.error.log'
accesslog = '/var/log/krapi/gunicorn.access.log'
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 133, in handle
req = next(parser)
File "/usr/local/lib/python3.8/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 186, in __init__
super().__init__(cfg, unreader)
File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 53, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 235, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.8/site-packages/gunicorn/http/message.py", line 73, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
就我而言,我发现任何HEAD
请求都会发出这个。
我在 gunicorn 后面使用 django,我怀疑应用程序想要编写响应主体(它不应该),但我还没有确认是这种情况。
相同的行为
我认为这可能会被 #2277 修复
就我而言, Ansible 的 wait_for 模块是原因。
我使用 Ansible 部署了一个 gunicorn + Flask 服务器(特别是 Python 3.6.12、gunicorn 19.9.0、Flask 1.4.1)。
启动服务后,我使用 wait_for 模块来确保服务已启动并正在运行。
该模块可能会在验证服务启动后立即断开连接(不等待 gunicorn 响应),因此,gunicorn 会引发此错误。
我猜其他监控系统也是如此。
我有同样的错误..嗯
目前我们得到了巨大的流量.. 100-1000 TPS,并且一些请求随机失败
蟒蛇 3.8
烧瓶
独角兽
使用以下泊坞窗属性..
FROM python:3-slim
RUN apt-get update && apt-get -y install gcc
ENV PYTHONUNBUFFERED True
COPY . /app
WORKDIR /app/src
RUN pip install Flask requests gunicorn
RUN pip install -U flask-cors
RUN pip install requests
RUN pip install DateTime
RUN pip install timedelta
RUN chmod 444 app.py
CMD exec gunicorn -b :443 --workers 5 --threads 8 --timeout 10 app:app --reload
有什么解决办法吗?
是否有任何更新?
似乎有多个 PR 来修复它,我们是否有发布它们的时间表?
嗨@tilgovi
我们有发布这个新版本的时间表吗? Gunicorn 包好像很久没有更新了...
我可能会在今天发布。 我将重新检查这个 enotconn 问题,因为我对提交的解决方案不满意。 @tilgovi有另一个可以测试的修复程序。
?
您是否测试了其他补丁以提供帮助?
谢谢,我想知道是否有关于 pip 包的任何更新信息?
@yehjames是为您工作的大师吗? 今天计划发布。 但是欢迎任何关于 master 如何在不同平台上工作的反馈。
@benoitc 有任何更新吗? 在生产中使用 20.0.4 并实施@asantoni建议的
我们将努力尽快发布版本。 我们不能保证有一天,但我们正在努力找出此版本的剩余内容并改进未来的发布管理。
如果您想收到通知,请对存储库使用 GitHub 的“监视”功能并监视发布。
嗨。 我在使用 HAProxy + Gunicorn + Django 时遇到了同样的问题。
由于检查未响应,我的 HAProxy 后端几乎丢失了所有服务器,并且 Gunicorn 日志受到以下问题的困扰:
[2021-07-23 18:16:27 -0500] [13] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/gunicorn/workers/sync.py", line 133, in handle
req = next(parser)
File "/usr/local/lib/python3.9/site-packages/gunicorn/http/parser.py", line 41, in __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/usr/local/lib/python3.9/site-packages/gunicorn/http/message.py", line 186, in __init__
super().__init__(cfg, unreader)
File "/usr/local/lib/python3.9/site-packages/gunicorn/http/message.py", line 53, in __init__
unused = self.parse(self.unreader)
File "/usr/local/lib/python3.9/site-packages/gunicorn/http/message.py", line 235, in parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.9/site-packages/gunicorn/http/message.py", line 73, in parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
我正在使用 gunicorn==20.0.4, Django==3.1.5, HA-Proxy version 2.2.11-1ppa1~bionic
有关如何进行的任何线索?
这是在 TCP 模式下,没有 SSL,在 Locust 压力测试中。
有人请分享这个问题的解决方案
@krishnamanchikalapudi @ricarhincapie请升级到最新版本的 Gunicorn :)
最有用的评论
我发送了一个包含修复的拉取请求,我已经在生产中运行了几天。 该错误是由竞争条件引起的,在调用
getpeername()
之前可以关闭套接字(由客户端、操作系统等),因此它正确地引发了异常。 然而,gunicorn 没有捕捉到这个异常,所以它会冒泡并导致服务器崩溃。 我的修复只是捕获异常并将其作为 NoMoreData 异常引发,该异常已经由堆栈中的其他代码处理。 这可以防止不合时宜的断开连接导致服务器崩溃。