Gunicorn: مآخذ

تم إنشاؤها على ٥ نوفمبر ٢٠١٨  ·  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 كومينتر

هل أي شيء مثير للاهتمام في الجزء العلوي من gunicorn في جرابك ، مثل الوكيل العكسي ، nginx؟

لا ، لا وكلاء ، لا nginx

أواجه نفس المشكلة بالضبط: مرتبك:

عند المنبع لدينا HAProxy وعلى تنسيق سجل HTTP الخاص به ، حالة الجلسة عند قطع الاتصال (راجع http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#8.5) تسجل هذه الأخطاء على أنها CH-- معنى

  • ج: تم إحباط جلسة TCP بشكل غير متوقع من قبل العميل.
  • H: كان الوكيل ينتظر استجابة كاملة وصالحة رؤوس من الخادم (HTTP فقط).

لذلك ، إذا فهمت ذلك بشكل صحيح ، فقد أغلق العميل الاتصال بينما كان Gunicorn لا يزال يرسل الرد.

أي أدلة على ما الذي يجعل العميل يجهض؟ هل انتظر gunicorn وقتًا طويلاً لإرسال رؤوس استجابة كاملة؟

javabrett لا يبدو الأمر كذلك ، على الأقل في رسائل السجل القليلة التي بحثت عنها ، إنها في الغالب صور أو أصول أخرى ، لذلك لا ينبغي أن تستغرق الكثير من الوقت.

ربما يكون العميل قد أغلق المتصفح أو أي إجراء آخر من شأنه إغلاق الاتصال فجأة؟ : التفكير:

gforcada هل تستخدم بروتوكول الوكيل مع haproxy؟

benoitc لا

أي شخص يحصل على أي مكان مع هذا؟ ليس لدي الكثير للمساهمة به باستثناء نفس الخطأ بالضبط.

يتكون تهيئتي من loadbalancer يتم استخدامه لإنهاء SSL وإعادة توجيه الطلبات إلى تطبيق 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)

كان لدي نفس الشيء مع pod تشغيل صورة عامل ميناء dpage / pgadmin4: 4.2

خطأ OS: [Errno 107] المقبس غير متصل
[2019-06-14 12:20:32 +0000] [77] [خطأ] طلب معالجة خطأ مأخذ التوصيل.
Traceback (آخر مكالمة أخيرة):
ملف "/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__
unused = self.parse (self.unreader) غير مستخدم
ملف "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py" ، السطر 230 ، في التحليل
self.headers = self.parse_headers (البيانات [: idx])
ملف "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py" ، السطر 74 ، في parse_headers
remote_addr = self.unreader.sock.getpeername ()

يشبه إلى حد بعيد: https://github.com/benoitc/gunicorn/issues/2070

أتلقى هذا الخطأ أحيانًا على 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 هنا. باستخدام Google Cloud Platform ، 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. تشغيل تطبيق Flask مع Python 3.7 في App Engine Standard Env.

نفس المشكلة هنا

أواجه نفس المشكلة في تشغيل تطبيق Django مع Python 3.7 في Google App Engine.

Traceback (آخر مكالمة أخيرة): ملف "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py" ، السطر 134 ، في المقبض req = six.next (محلل) ملف "/ env / lib / python3.7 / site -pack / 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 (طلب ، ذاتي) .__ init __ (cfg، unreader) ملف" /env/lib/python3.7/site-packages /gunicorn/http/message.py "، السطر 54 ، في __init__ unused = self.parse (self.unreader) ملف" /env/lib/python3.7/site-packages/gunicorn/http/message.py "، سطر 230 ، في تحليل self.headers = self.parse_headers (البيانات [: idx]) ملف "/env/lib/python3.7/site-packages/gunicorn/http/message.py" ، السطر 74 ، في parse_headers remote_addr = self .unreader.sock.getpeername () خطأ OS: [Errno 107] نقطة نهاية النقل غير متصلة

نفس المشكلة تشغيل GAE python 3.7 gunicorn و fastapi / uvicorn.

نفس المشكلة Google Cloud Run

أي نوع من الطلبات نتحدث عنه؟

نفس المشكلة في محرك تطبيقات جوجل. طلب POST. يحدث بشكل غير متسق. تطبيق Flask. 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 الخام)

أعتقد أنه يشير إلى حقيقة أنك تحدد صراحةً المسار app الذي يجب على _gunicorn_ استيراده وتشغيله ، مثل server.main:app في مثاله.

جنيه: ربما يساعد المثال المحدث هنا: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard_python37/hello_world (لذلك عليك بشكل أساسي السماح للخدمة بالتعامل مع الطريقة التي يجب أن يكون بها الخادم بدأت)

أولاً ، benoitc شكرًا لك. عملك رائع.

أواجه هذه المشكلة أيضًا على Google Cloud Run w / gunicorn. أنا أنشر ما لدي ، على الرغم من أنه ليس فريدًا على الأرجح ، فأطلع على ما ورد أعلاه. أنا أقوم بتشغيل تطبيق Flask مع Gunicorn كخادم (وليس وكيل) في حاوية Docker.

التتبع (من وحدة التحكم 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

وإخراج Google المحلل لما سبق:

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)

إذا كان هناك أي شيء آخر يمكنني تقديمه أو القيام به للمساعدة هنا ، فيرجى إبلاغي بذلك.

سيكون العلاقات العامة موضع ترحيب للتعامل مع ENOTCONN بأمان لجميع العمال. يرجى النشر هنا إذا بدأت العمل على هذا وسيسعدني مراجعة العلاقات العامة. أنا متأكد من أن البعض في هذا الموضوع سيسعدهم المساعدة في اختبار الفرع.

نفس المشكلة ، Google App Engine ، gunicorn يقدم تطبيق Django ، تموت نسبة صغيرة من الطلبات على النحو التالي:

image

entrypoint: gunicorn -b :$PORT wsgi_api:application

سيكون العلاقات العامة موضع ترحيب للتعامل مع ENOTCONN بأمان لجميع العمال. يرجى النشر هنا إذا بدأت العمل على هذا وسيسعدني مراجعة العلاقات العامة. أنا متأكد من أن البعض في هذا الموضوع سيسعدهم المساعدة في اختبار الفرع.

أنا واحد من أولئك الموجودين في هذا الموضوع سعيد للمساعدة في الاختبار ، لذا يرجى الاتصال بي إذا كان بإمكاني المساعدة.

سيكون العلاقات العامة موضع ترحيب للتعامل مع ENOTCONN بأمان لجميع العمال. يرجى النشر هنا إذا بدأت العمل على هذا وسيسعدني مراجعة العلاقات العامة. أنا متأكد من أن البعض في هذا الموضوع سيسعدهم المساعدة في اختبار الفرع.

أنا واحد من أولئك الموجودين في هذا الموضوع سعيد للمساعدة في الاختبار ، لذا يرجى الاتصال بي إذا كان بإمكاني المساعدة.

أنا سعيد للمساعدة في اختبار العلاقات العامة. إذا احتجت إلى أي مساعدة ، يرجى الاتصال بي.

أنا سعيد للمساعدة في اختبار العلاقات العامة. إذا احتجت إلى أي مساعدة ، يرجى الاتصال بي.

سيكون العلاقات العامة موضع ترحيب للتعامل مع ENOTCONN بأمان لجميع العمال. يرجى النشر هنا إذا بدأت العمل على هذا وسيسعدني مراجعة العلاقات العامة. أنا متأكد من أن البعض في هذا الموضوع سيسعدهم المساعدة في اختبار الفرع.

السبب الجذري لهذه المشكلة مع أحدث إصدار من gunicorn==19.9.0 . تم تحويلي لاستخدام الإصدار الأقدم من gunicorn==19.7.1 . تمكنت من الجري دون أي مشكلة. يرجى المحاولة مع الإصدار الأقدم.

بدلا من محاولة سيد الماضي. 20.0 سيأتي أخيرًا اليوم لقد تم تعقبي جانبيًا.

كيف تبدو نقطة نهاية فحص صحتك؟ كيف ترد عليه ، هل تقوم بإغلاق الاتصال؟ هل تحدد طول الرأس وشركاه؟ لست متأكدًا من سبب إجراء الفحص الصحي عبر البريد. يبدو غريبا ...

@ cmin764 هل يقوم fflask بتعيين بعض الرؤوس الافتراضية؟ سأحاول ولكن سيكون من المثير للقلق أن يبدو الرد

benoitc عندما كنت أستخدم التحقق من صحة نقطة النهاية gunicorn==19.9.0 أمر سيء حقًا. اتصالات قاعدة البيانات في انتظار وقت أطول. التحميل الكامل للتطبيق ينخفض.

أقدم gunicorn==19.7.1 نقطة النهاية تخترق فحص صحة نقطة النهاية يبدو جيدًا. لم أكن أغلق أي اتصالات ولم أحدد طول الرؤوس.

سأختبر أيضًا أحدث إصدار 20.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 (الرجوع إلى إصدار أقدم من الأحدث) عملت في بيئة محرك تطبيقات Google مع قوائم انتظار الدفع التي تغذي العمال ، ويتحدث العمال مع بعضهم البعض عبر http.

باستخدام 19.7.1 (الرجوع إلى إصدار أقدم من الأحدث) عملت في بيئة محرك تطبيقات Google مع قوائم انتظار الدفع التي تغذي العمال ، ويتحدث العمال مع بعضهم البعض عبر http.

هذه هي حالة الاستخدام الخاصة بي. سأعطي هذه فرصة.

هل جربت الإصدار الأخير؟

تمت تجربة أحدث 20.0.0 على Openshift (openhift v3.11.135 ، kubernetes v1.11.0) - حدث الخطأ نفسه. ما لاحظته هو خطأ في الحمل العالي (اختبارات التكامل تشغل 20 عاملًا parralel). يؤدي رفع عدد الكبسولات إلى تقليل حدوث الخطأ ، مما يؤدي إلى حدوث خطأ مضمون في جراب واحد. إنها 3 عمال مزامنة التكوين. 19.7.1 لا يُظهر أي خطأ في سجلات pod ، ولكن يواجه المستهلك الخارجي نفس EOF غير المتوقع عند الاتصال كما هو الحال مع الإصدار الأحدث. لذا فإن النسخة المهينة لا تساعد.

2019-11-12 16:08: 56982 خطأ gunicorn.error تلوح 277 glogging.py طلب معالجة خطأ في مأخذ التوصيل.
Traceback (آخر مكالمة أخيرة):
ملف "/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__
unused = 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 (البيانات [: 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 ()
خطأ نظام التشغيل: [Errno 107] نقطة نهاية النقل غير متصلة

تمت تجربة أحدث 20.0.0 على Openshift (openhift v3.11.135 ، kubernetes v1.11.0) - حدث الخطأ نفسه. ما لاحظته هو خطأ في الحمل العالي (اختبارات التكامل تشغل 20 عاملًا parralel). يؤدي رفع عدد الكبسولات إلى تقليل حدوث الخطأ ، مما يؤدي إلى حدوث خطأ مضمون في جراب واحد. إنها 3 عمال مزامنة التكوين. 19.7.1 لا يُظهر أي خطأ في سجلات pod ، ولكن يواجه المستهلك الخارجي نفس EOF غير المتوقع عند الاتصال كما هو الحال مع الإصدار الأحدث. لذا فإن النسخة المهينة لا تساعد.

2019-11-12 16:08: 56982 خطأ gunicorn.error تلوح 277 glogging.py طلب معالجة خطأ في مأخذ التوصيل.
Traceback (آخر مكالمة أخيرة):
ملف "/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 ، في التالي
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
unused = 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 (البيانات [: 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 ()
خطأ نظام التشغيل: [Errno 107] نقطة نهاية النقل غير متصلة

هل يمكنك محاولة زيادة مهلة جهاز التوجيه.

هل يمكنك محاولة زيادة مهلة جهاز التوجيه.

بعد هذا الخطأ

لقد واجهت هذه المشكلة مؤخرًا مع gunicorn = 19.9.0. إعادة حل المشكلة. أنا مشترك في Google Kubernetes Engine. التطبيق عبارة عن تطبيق flask -
دخول:
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 في الإنتاج.
يحتوي هذا المستودع على نسخة

نفس المشكلة هنا:
حدث Gunicorn 19.9.0 + GKE أيضًا عندما كنا نتعامل مع حمولة عالية.

سم

لست متأكدًا ، لكن يبدو أن كل شيء عاد إلى طبيعته الآن.

هذا هو تطبيقي. 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.

لدي نفس المشكلة. Gunicorn مع gevent ، مجرد 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 fo لديك أي خطأ من جانب جوجل؟ كيف يتم إرسال ping من Google LB؟ هل هي مهلة على جانب جوجل LB؟

إنه يعمل في Kubernetes ، والفحص الصحي هو بروتوكول HTTP ، محافظ للغاية (مهلة 5 ثوانٍ ، 10 حالات فشل متتالية قبل وضع علامة على الحاويات ميتة).

من جانب Google ، عرض HTTP LB أمام Gunicorn أكثر من 40 كيلو خطأ 502 (في دقيقتين) مع السبب التالي: "backend_timeout":
image

حصلت على 4 نسخ طبق الأصل (4 حاويات) ، تحطمت جميعها في نفس الوقت تقريبًا في تلك الليلة. لذلك ، إنه تخمين جامح ولكن ربما كان على Google إعادة تشغيل موازن التحميل الخاص بهم لنشر إصدار جديد ، أو إصلاح ، أو أيًا كان ، فهو كل البرامج بعد كل شيء ، لذلك قد يكون العميل (كما يراه Gunicorm) قد قطع الاتصال بطريقة غير ودية / لا- الطريقة المتوقعة. بأي حال من الأحوال ، يجب أن يكون Gunicorn مرنًا في أي موقف يحدث للعميل.

يبدو تجاهل ENOTCONN جيدًا ، فقد تمت مناقشة القيام بذلك مباشرةً في بعض الوحدات النمطية من Python stdlib ، لبعض العمليات: https://bugs.python.org/issue30319#msg297643

نفس الخطأ.

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

تطبيقان للقارورة (واجهة برمجة تطبيقات وواجهة) في حاويات منفصلة لرسو السفن كل منها يعمل بجونيكورن. حدث الخطأ في Chrome / Chromium (وليس Firefox) ، عندما أنشر على api عبر نموذج في تطبيق الواجهة. قد يكون متصلاً باتصالات TCP الوقائية في Chrome. بما أن 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"]

أواجه نفس المشكلة عند تشغيل django مع gunicorn باستخدام عامل تركيب على المحيط الرقمي.
الإصدار 20.0.4 من Gunicorn

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

تطبيقان للقارورة (واجهة برمجة تطبيقات وواجهة) في حاويات منفصلة لرسو السفن كل منها يعمل بجونيكورن. حدث الخطأ في Chrome / Chromium (وليس Firefox) ، عندما أنشر على api عبر نموذج في تطبيق الواجهة. قد يكون متصلاً باتصالات TCP الوقائية في Chrome. بما أن nginx يجب أن يكون قادرًا على التعامل مع هذه ، فقد وضعته أمام الحاويات. لا يغير شيئا.

تحديث في حالتي كانت المشكلة في مكان آخر. كان ناتجًا عن حدث jquery onclick على زر إرسال. اضطررت إلى النشر بشكل غير متزامن مع ajax لحل المشكلة.

هل هناك أي تحديثات على هذا الخطأ؟

هل هناك أي تحديثات على هذا الخطأ؟

حسنًا ، هل يمكنك وصف السياق الذي يحدث فيه ذلك؟ أيضًا لكل ذلك باستخدام kubernetes ، هل يمكنك وصف كيفية تكوين الفحص الصحي الخاص بك حتى نتمكن من إعادة إنتاجه؟

ما الذي يجعلك تعتقد أنها مرتبطة بـ Kubernetes؟ لا يوجد عميل يسيء التصرف ، يجب أن يؤدي الاتصال نصف المغلق إلى تعطل عامل Gunicorn تمامًا ، سواء كان يعمل في Kubernetes أو Mesos أو docker أو baremetal: يكون Gunicorn أكثر مرونة.

لم أجد أداة إعادة إنتاج موثوقة / سهلة ، ولكن إذا فعلت ذلك ، أعتقد أنني قد أكون قادرًا على تحطيم كل خادم ويب جوني كورن يتعرض مباشرة للإنترنت.

حسنًا ، لم أتعرض لمثل هذا الانهيار عندما يكون gunicorn وراء nginx وبعضها يصدر
ذكرت هناك يبدو أنها تتعلق kubernetes.

على أي عامل يحدث هذا؟ هل يستخدم gunicorn خلف وكيل؟ أي
واحد؟

في الثلاثاء 10 آذار (مارس) 2020 الساعة 11:52 ، كتب الأردن 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=AAADRITYFZI4GINCSG752OTRGYLXDA5CNFSM4GBYQQA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW34
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAADRIRSO4T7WQTS6GMHLO3RGYLXDANCNFSM4GBYQQAQ
.

>

مرسلة من هاتفي المحمول

نفس الخطأ مع خدمة aws ecs خلف موازن تحميل aws.
حدث مرة واحدة في نفس الوقت على جميع النسخ المتماثلة (الحاويات / المهام)
Gunicorn كحزمة بيب. لا يوجد Nginx ولا وكيل.
بايثون 3.7.6
إصدار Gunicorn: 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 ، والذي يتم معالجته بالفعل بواسطة رمز آخر أعلى المكدس. هذا يمنع قطع الاتصال في توقيت سيئ من تعطل الخادم.

هناك أيضًا العلاقات العامة https://github.com/benoitc/gunicorn/pull/2277

أنا أستخدم Kubernetes (1.16.8-gke.15) وأحدث Gunicorn (20.0.4) و Python 3.7. إذا قمت بتقديم طلب POST وقمت بزيادة التأخير الزمني بدءًا من ثانية واحدة لكل تكرار ، فإنه يتوقف عن العمل عندما يكون التأخير 360 ثانية. تم الانتهاء من المهمة داخل Gunicorn ، وبعد بضع دقائق تُرجع هذا الخطأ:

Socket error processing request.
OSError: [Errno 107] Transport endpoint is not connected

عندما ينقطع الاتصال بين Kubernetes و Gunicorn ، تظل نقطة نهاية Kubernetes والعميل متصلين. تبدو الفحوصات الصحية جيدة ، لكن من الممكن أن تكون قد تم تكوينها بشكل خاطئ بطريقة ما. لم أجد أي سجلات على جانب Kubernetes لتحديد المشكلة.

حصلت على نفس النتيجة لـ Gunicorn (19.7.1).

لقد أضفت علامة timeout لـ Gunicorn ، وأنا أستخدم GKE Loadbalancer الافتراضي مع BackendConfig لـ Kubernetes GKE . لقد حاولت أيضًا مع دخول NGINX وإضافة التعليقات التوضيحية للتعامل مع أي مهلات. أمر 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 (افتراضي ، 26 فبراير 2020 ، 15:09:34)
[GCC 8.3.0] على لينكس

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 يرسل هذا.

أنا أستخدم django خلف gunicorn ، وأظن أن التطبيق يريد كتابة رسالة رد ، (لا ينبغي) ، لكنني لم أقم بتأكيد ذلك حتى الآن.

نفس السلوك

أعتقد أن هذا قد يتم إصلاحه بواسطة # 2277

في حالتي ، وحدة انتظار Ansible's wait_for هي السبب.

أستخدم Ansible لنشر خادم gunicorn + flask (على وجه التحديد Python 3.6.12 و Gunicorn 19.9.0 و Flask 1.4.1).

بعد بدء الخدمة ، أستخدم وحدة wait_for للتأكد من تشغيل الخدمة.
من المحتمل أن تقطع هذه الوحدة الاتصال فورًا بعد التحقق من أن الخدمة قيد التشغيل (لا تنتظر استجابة gunicorn) وبالتالي ، يثير gunicorn هذا الخطأ.

أعتقد أن أنظمة المراقبة الأخرى تفعل الشيء نفسه.

حصلت على نفس الخطأ .. هم
حاليا لدينا حركة مرور ضخمة .. 100-1000 TPS ، وفشل بعض الطلبات بشكل عشوائي

Python 3.8.1
قارورة
جونيكورن

مع خصائص عامل الإرساء أدناه ..

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

اي حل؟

هل هناك أي تحديثات على هذا؟
يبدو أن هناك العديد من العلاقات العامة لإصلاحها ، هل لدينا جدول زمني للإفراج عنها؟
Screenshot 2020-12-14 at 12 45 42

مرحباtilgovi
هل لدينا جدول زمني لإصدار هذا الإصدار الجديد؟ يبدو أن حزمة Gunicorn لا يتم تحديثها لفترة طويلة ...
image

سأقوم بإصدار بيان ربما اليوم. سأعيد فحص مشكلة enotconn لأنني لست سعيدًا بالحل الذي تم الالتزام به. لدى tilgovi إصلاح آخر يمكن اختباره.

؟

هل قمت باختبار التصحيح الآخر للمساعدة؟

شكرًا ، أتساءل عن معرفة هل هناك أي معلومات تحديث حول حزمة النقطة؟

yehjames هل سيد العمل لديك؟ الإصدار المخطط الآن اليوم. ولكن نرحب بأي ملاحظات حول كيفية عمل السيد على منصات مختلفة.

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 ، في اختبار إجهاد الجراد.

شخص ما الثابتة والمتنقلة مشاركة الحل بشأن هذه المسألة

krishnamanchikalapudiricarhincapie الرجاء الترقية إلى أحدث إصدار من Gunicorn :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات