Gunicorn: 插座

创建于 2018-11-05  ·  87评论  ·  资料来源: benoitc/gunicorn

服务在 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
Investigation help wanted

最有用的评论

我发送了一个包含修复的拉取请求,我已经在生产中运行了几天。 该错误是由竞争条件引起的,在调用getpeername()之前可以关闭套接字(由客户端、操作系统等),因此它正确地引发了异常。 然而,gunicorn 没有捕捉到这个异常,所以它会冒泡并导致服务器崩溃。 我的修复只是捕获异常并将其作为 NoMoreData 异常引发,该异常已经由堆栈中的其他代码处理。 这可以防止不合时宜的断开连接导致服务器崩溃。

所有87条评论

在你的 pod 中,gunicorn 上游有什么有趣的东西,比如反向代理,nginx?

不,没有代理,没有 nginx

我遇到了完全相同的问题:confused:

在上游,我们有 HAProxy 及其 HTTP 日志格式,断开连接时的会话状态(参见 http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#8.5)它将这些错误记录为CH--含义:

  • C : TCP 会话被客户端意外中止。
  • H :代理正在等待来自服务器的完整、有效的响应 HEADERS(仅限 HTTP)。

所以,如果我理解正确,客户端关闭了连接,而 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

https://stackoverflow.com/questions/58389201/gunicorn-is-failing-with-oserror-errno-107-transport-endpoint-is-not-connecte

问题站

同样的问题,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 应用提供服务,一小部分请求会像这样消失:

image

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

https://stackoverflow.com/questions/58389201/gunicorn-is-failing-with-oserror-errno-107-transport-endpoint-is-not-connecte

使用旧版本 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”:
image

我得到了 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?

CMD ["gunicorn", " app:app ", "-b", "0.0.0.0:8001", "-t 90"]
我也试过
CMD ["gunicorn", " app:app ", "-b", "0.0.0.0:8001", "-t 90", "--preload"]

在 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:appLimitNOFILE=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 来修复它,我们是否有发布它们的时间表?
Screenshot 2020-12-14 at 12 45 42

嗨@tilgovi
我们有发布这个新版本的时间表吗? Gunicorn 包好像很久没有更新了...
image

我可能会在今天发布。 我将重新检查这个 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 :)

此页面是否有帮助?
0 / 5 - 0 等级