Gunicorn: soket

Dibuat pada 5 Nov 2018  ·  87Komentar  ·  Sumber: benoitc/gunicorn

Layanan berjalan di pod kubernetes, dan entah dari mana dan tanpa penyebab khusus, layanan itu terjadi terus-menerus:

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

Komentar yang paling membantu

Saya mengirim permintaan tarik dengan perbaikan yang telah saya jalankan dalam produksi selama beberapa hari sekarang. Bug ini disebabkan oleh kondisi balapan, di mana soket dapat ditutup (oleh klien, OS, dll.) sebelum getpeername() dipanggil, sehingga memunculkan pengecualian dengan benar. Namun, gunicorn tidak menangkap pengecualian ini, jadi itu menggelegak dan merusak server. Perbaikan saya hanya untuk menangkap pengecualian dan menaikkannya sebagai pengecualian NoMoreData, yang sudah ditangani oleh kode lain lebih jauh dari tumpukan. Ini mencegah pemutusan yang tidak tepat waktu agar tidak membuat server mogok.

Semua 87 komentar

Apakah ada sesuatu yang menarik di hulu gunicorn di pod Anda, seperti proxy terbalik, nginx?

Tidak, tidak ada proxy, tidak ada nginx

Saya mengalami masalah yang sama persis :confused:

Upstream kami memiliki HAProxy dan pada format log HTTP-nya, status sesi saat pemutusan (lihat http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#8.5) ia mencatat kesalahan tersebut sebagai CH-- artinya:

  • C : sesi TCP tiba-tiba dibatalkan oleh klien.
  • H : proxy sedang menunggu HEADERS respons yang lengkap dan valid dari server (hanya HTTP).

Jadi, jika saya memahaminya dengan benar, klien menutup koneksi saat gunicorn masih mengirim respons.

Ada petunjuk apa yang membuat klien batal? Apakah menunggu lama bagi gunicorn untuk mengirim tajuk respons lengkap?

@javabrett sepertinya tidak seperti itu, setidaknya pada beberapa pesan log yang saya cari, sebagian besar adalah gambar atau aset lainnya, jadi seharusnya tidak memakan banyak waktu.

Klien mungkin telah menutup browser atau tindakan lain yang akan menutup koneksi secara tiba-tiba? :pemikiran:

@gforcada apakah Anda menggunakan protokol proxy dengan haproxy?

@benoitc bukan yang saya sadari

ada yang bisa kemana-mana dengan ini? Saya tidak punya banyak kontribusi kecuali kesalahan yang sama persis.

Konfigurasi saya terdiri dari loadbalancer yang digunakan untuk menghentikan SSL dan meneruskan permintaan ke aplikasi Django yang berjalan di wadah buruh pelabuhan. Saya tidak yakin dengan apa LB diimplementasikan - ini adalah produk Digital Ocean.

Saya cukup yakin ini terkait dengan penyeimbang beban karena saya memiliki aplikasi yang sama yang berjalan di wadah lain yang tidak berada di belakang LB dan tidak pernah memiliki masalah ini.

Adakah ide tentang akar penyebabnya dan bagaimana cara mencegahnya?

Aku ingin tahu apakah ada tindakan di sini. Jika ini adalah pemutusan klien biasa, kami mungkin dapat membungkam kesalahan dan mungkin mencatat pemutusan di log akses, tetapi jika tidak, saya tidak yakin apa yang harus dilakukan.

Saya baru saja mengalami kesalahan yang sama yang membuat server web pemantauan kami mogok:

[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)

Saya memiliki hal yang sama dengan pod yang menjalankan gambar buruh pelabuhan dpage/pgadmin4:4.2

OSError: [Errno 107] Soket tidak terhubung
[2019-06-14 12:20:32 +0000] [77] [ERROR] Permintaan pemrosesan kesalahan soket.
Traceback (panggilan terakhir terakhir):
File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/gthread.py", baris 274, di pegangan
req = six.next(sambungan.parser)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/parser.py", baris 41, di __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", baris 181, di __init__
super(Permintaan, diri).__init__(cfg, belum dibaca)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", baris 54, di __init__
tidak terpakai = self.parse(self.unreader)
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", baris 230, di parse
self.headers = self.parse_headers(data[:idx])
File "/usr/local/lib/python3.6/site-packages/gunicorn/http/message.py", baris 74, di parse_headers
remote_addr = self.unreader.sock.getpeername()

Terlihat sangat mirip dengan: https://github.com/benoitc/gunicorn/issues/2070

Saya terkadang mendapatkan kesalahan ini di Google Cloud Run yang dihosting. Di bawah ini adalah versi sederhana dari definisi container kami:

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 menampilkan stacktrace berikut:

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

Masalah yang sama dengan OP di sini. Menggunakan 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"

Saya mengalami masalah yang sama persis

Masalah yang sama persis dengan GAEfan. Menjalankan aplikasi Flask dengan Python 3.7 di App Engine Standard Env.

Masalah yang sama di sini

Saya mengalami masalah yang sama saat menjalankan aplikasi Django dengan Python 3.7 di Google App Engine.

Traceback (panggilan terakhir terakhir): File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", baris 134, di handle req = six.next(parser) File "/env/ lib/python3.7/site-packages/gunicorn/http/parser.py", baris 41, di __next__ self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count) File "/env/lib /python3.7/site-packages/gunicorn/http/message.py", baris 181, di __init__ super(Request, self).__init__(cfg, unreader) File "/env/lib/python3.7/site-packages /gunicorn/http/message.py", baris 54, di __init__ unused = self.parse(self.unreader) File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", baris 230, di parse self.headers = self.parse_headers(data[:idx]) File "/env/lib/python3.7/site-packages/gunicorn/http/message.py", baris 74, di parse_headers remote_addr = self .unreader.sock.getpeername() OSError: [Errno 107] Titik akhir transportasi tidak terhubung

Masalah yang sama menjalankan GAE python 3.7 gunicorn dan fastapi/uvicorn.

Masalah yang sama Google Cloud Run

permintaan seperti apa yang sedang kita bicarakan?

masalah yang sama di mesin aplikasi google. POSTING permintaan. terjadi secara tidak konsisten. Aplikasi labu. @benoitc tolong beri tahu saya info apa yang berguna dan saya bisa memposting.

Masalah yang sama juga, Google App Engine, permintaan POST juga, aplikasi Flask. Tampaknya sudah dimulai ketika saya mengubah ke kode titik masuk khusus alih-alih membiarkan yang default. Titik masuk khusus adalah sebagai berikut (di Google App Engine Anda menyetelnya di dalam file app.yaml):

gunicorn -b :$PORT --timeout 1200 server.main:app

Titik masuk default tidak mengatur apa pun (tidak tahu apa yang digunakan sebagai titik masuk default).

Tidak yakin apakah itu dimulai karena itu, tetapi saya perhatikan ini ketika saya membuat perubahan ini (di antara perubahan lainnya).

Tidak, tidak ada proxy, tidak ada nginx

Saya menggunakan gunicorn tanpa nginx . Saya mendapatkan masalah yang sama. Pengaturan saya berjalan pada 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

pertanyaan berdiri

Masalah yang sama juga, Google App Engine, permintaan POST juga, aplikasi Flask. Tampaknya sudah dimulai ketika saya mengubah ke kode titik masuk khusus alih-alih membiarkan yang default. Titik masuk khusus adalah sebagai berikut (di Google App Engine Anda menyetelnya di dalam file app.yaml):

gunicorn -b :$PORT --timeout 1200 server.main:app

Titik masuk default tidak mengatur apa pun (tidak tahu apa yang digunakan sebagai titik masuk default).

Tidak yakin apakah itu dimulai karena itu, tetapi saya perhatikan ini ketika saya membuat perubahan ini (di antara perubahan lainnya).

Apakah yang Anda maksud: titik masuk dapatkah Anda memposting log debug dan cara permintaan dilakukan? (http mentah akan membantu)

pertanyaan berdiri

Masalah yang sama juga, Google App Engine, permintaan POST juga, aplikasi Flask. Tampaknya sudah dimulai ketika saya mengubah ke kode titik masuk khusus alih-alih membiarkan yang default. Titik masuk khusus adalah sebagai berikut (di Google App Engine Anda menyetelnya di dalam file app.yaml):
gunicorn -b :$PORT --timeout 1200 server.main:app
Titik masuk default tidak mengatur apa pun (tidak tahu apa yang digunakan sebagai titik masuk default).
Tidak yakin apakah itu dimulai karena itu, tetapi saya perhatikan ini ketika saya membuat perubahan ini (di antara perubahan lainnya).

Apakah yang Anda maksud: titik masuk dapatkah Anda memposting log debug dan cara permintaan dilakukan? (http mentah akan membantu)

Saya pikir dia merujuk pada fakta bahwa Anda secara eksplisit menentukan jalur app yang _gunicorn_ harus impor-temukan dan jalankan, seperti server.main:app dalam contohnya.

LE: Mungkin contoh yang diperbarui di sini membantu: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard_python37/hello_world (jadi pada dasarnya Anda harus membiarkan layanan menangani bagaimana server seharusnya dimulai)

Pertama, @benoitc TERIMA KASIH. Pekerjaanmu luar biasa.

Saya juga mengalami masalah yang sama di Google Cloud Run w/gunicorn. Saya memposting apa yang saya miliki, meskipun sepertinya tidak unik, dengan teliti di atas. Saya menjalankan aplikasi Flask dengan Gunicorn sebagai server (dan tanpa proxy) dalam wadah Docker.

Traceback (dari konsol 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

Dan hasil parsing Google di atas:

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)

Jika ada hal lain yang dapat saya berikan atau lakukan untuk membantu di sini, beri tahu saya.

Seorang PR akan dipersilakan untuk menangani ENOTCONN anggun untuk semua pekerja. Silakan posting di sini jika Anda mulai mengerjakan ini dan saya akan dengan senang hati meninjau PR. Saya yakin beberapa di utas ini akan dengan senang hati membantu menguji cabang.

Masalah yang sama, Google App Engine, gunicorn yang melayani aplikasi Django, sebagian kecil permintaan mati seperti ini:

image

entrypoint: gunicorn -b :$PORT wsgi_api:application

Seorang PR akan dipersilakan untuk menangani ENOTCONN anggun untuk semua pekerja. Silakan posting di sini jika Anda mulai mengerjakan ini dan saya akan dengan senang hati meninjau PR. Saya yakin beberapa di utas ini akan dengan senang hati membantu menguji cabang.

Saya salah satu dari mereka di utas ini dengan senang hati membantu menguji, jadi tolong ping saya jika saya dapat membantu.

Seorang PR akan dipersilakan untuk menangani ENOTCONN anggun untuk semua pekerja. Silakan posting di sini jika Anda mulai mengerjakan ini dan saya akan dengan senang hati meninjau PR. Saya yakin beberapa di utas ini akan dengan senang hati membantu menguji cabang.

Saya salah satu dari mereka di utas ini dengan senang hati membantu menguji, jadi tolong ping saya jika saya dapat membantu.

Saya senang membantu menguji PR. Jika butuh bantuan silahkan ping saya.

Saya senang membantu menguji PR. Jika butuh bantuan silahkan ping saya.

Seorang PR akan dipersilakan untuk menangani ENOTCONN anggun untuk semua pekerja. Silakan posting di sini jika Anda mulai mengerjakan ini dan saya akan dengan senang hati meninjau PR. Saya yakin beberapa di utas ini akan dengan senang hati membantu menguji cabang.

Akar penyebab masalah ini dengan versi terbaru gunicorn==19.9.0 . Saya dialihkan untuk menggunakan versi lama gunicorn==19.7.1 . Saya bisa berlari tanpa masalah. Silakan coba dengan versi yang lebih lama.

lebih baik mencoba master terakhir. 20.0 akhirnya akan datang hari ini saya telah dilacak.

Bagaimana tampilan titik akhir pemeriksaan kesehatan Anda? Bagaimana Anda menanggapinya, apakah Anda menutup koneksi? apakah Anda mengatur panjang header dan co? saya tidak yakin mengapa pemeriksaan kesehatan dilakukan melalui pos. terdengar aneh...

@ cmin764 apakah fflask mengatur beberapa header default? saya akan mencoba tetapi akan menarik untuk melihat responsnya

@benoitc Ketika saya menggunakan pemeriksaan kesehatan titik akhir gunicorn==19.9.0 benar-benar buruk. Koneksi database menunggu lebih lama. Seluruh pemuatan aplikasi turun.

lama gunicorn==19.7.1 Endpoint rusak Pemeriksaan kesehatan Endpoint terlihat bagus. Saya tidak menutup koneksi apa pun dan tidak mengatur panjang header.

Saya juga akan menguji versi terbaru 20.0.

Tidak, tidak ada proxy, tidak ada nginx

Saya menggunakan gunicorn tanpa nginx . Saya mendapatkan masalah yang sama. Pengaturan saya berjalan pada 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

dengan versi lama gunicorn=19.7.1 I was not able to run with the gevent`. Saya telah mengubah perintah gunicorn saya

gunicorn apps.wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 180

saya melihat perubahan sejak versi ini untuk melihat apakah ada alasan untuk itu. Terima kasih untuk umpan baliknya!

Menggunakan 19.7.1 (turunkan versi dari yang terbaru) bekerja di lingkungan mesin aplikasi google dengan antrian push memberi makan pekerja, dan pekerja berbicara satu sama lain melalui http.

Menggunakan 19.7.1 (turunkan versi dari yang terbaru) bekerja di lingkungan mesin aplikasi google dengan antrian push memberi makan pekerja, dan pekerja berbicara satu sama lain melalui http.

Ini adalah kasus penggunaan saya. Saya akan mencoba ini.

apakah Anda mencoba versi terbaru?

Mencoba 20.0.0 terbaru pada Openshift (openshift v3.11.135, kubernetes v1.11.0) - kesalahan yang sama terjadi. Apa yang saya amati kesalahan dipicu pada beban yang lebih tinggi (tes integrasi menjalankan 20 pekerja paralel). Meningkatkan jumlah pod mengurangi terjadinya kesalahan, meninggalkan pod tunggal menghasilkan kesalahan yang dijamin. Ini adalah konfigurasi 3 pekerja sinkronisasi. 19.7.1 hanya menunjukkan tidak ada kesalahan pada log pod , tetapi konsumen eksternal mengalami EOF tak terduga yang sama pada koneksi seperti dengan versi terbaru. Jadi merendahkan versi tidak membantu.

2019-11-12 16:08:56,982 KESALAHAN gunicorn.error glogging 277 glogging.py Permintaan pemrosesan kesalahan soket.
Traceback (panggilan terakhir terakhir):
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py", baris
134, dalam pegangan
req = enam.berikutnya(pengurai)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/parser.py", baris 41, di __next__
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 181, di __init__
super(Permintaan, diri).__init__(cfg, belum dibaca)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 54, di __init__
tidak terpakai = self.parse(self.unreader)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 230, di parse
self.headers = self.parse_headers(data[:idx])
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 74, di parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Titik akhir transportasi tidak terhubung

Mencoba 20.0.0 terbaru pada Openshift (openshift v3.11.135, kubernetes v1.11.0) - kesalahan yang sama terjadi. Apa yang saya amati kesalahan dipicu pada beban yang lebih tinggi (tes integrasi menjalankan 20 pekerja paralel). Meningkatkan jumlah pod mengurangi terjadinya kesalahan, meninggalkan pod tunggal menghasilkan kesalahan yang dijamin. Ini adalah konfigurasi 3 pekerja sinkronisasi. 19.7.1 hanya menunjukkan tidak ada kesalahan pada log pod , tetapi konsumen eksternal mengalami EOF tak terduga yang sama pada koneksi seperti dengan versi terbaru. Jadi merendahkan versi tidak membantu.

2019-11-12 16:08:56,982 KESALAHAN gunicorn.error glogging 277 glogging.py Permintaan pemrosesan kesalahan soket.
Traceback (panggilan terakhir terakhir):
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py", baris
134, dalam pegangan
req = enam.berikutnya(pengurai)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/parser.py", baris 41, di berikutnya
self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 181, di init
super(Permintaan, diri sendiri). init (cfg, belum dibaca)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 54, di init
tidak terpakai = self.parse(self.unreader)
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 230, di parse
self.headers = self.parse_headers(data[:idx])
File "/opt/rh/rh-python36/root/usr/lib/python3.6/site-packages/gunicorn/http/message.py", baris 74, di parse_headers
remote_addr = self.unreader.sock.getpeername()
OSError: [Errno 107] Titik akhir transportasi tidak terhubung

Bisakah Anda mencoba menambah batas waktu router.

Bisakah Anda mencoba menambah batas waktu router.

Mengikuti petunjuk ini, kami menemukan masalah : Penyiapan pemeriksaan kesiapan Openshift terlalu optimis (aplikasi membutuhkan waktu terlalu lama untuk beberapa permintaan), dan pada kegagalan loadbalancer eksternal (AVI) mengambil acara ini dan mengeluarkan pod dari kumpulan loadbalancing.

Saya baru-baru ini mengalami masalah ini dengan gunicorn=19.9.0. Restart menyelesaikan masalah. Saya diterapkan di Google Kubernetes Engine. Aplikasi ini adalah aplikasi labu -
pintu masuk:
command: ["sh", "-c", "gunicorn -b 0.0.0.0:$${PORT} -c gunicorn_config.py run:app"]
konfigurasi:

worker_temp_dir = '/dev/shm'
worker_class = 'gthread'
worker = 2
threads = 2
worker_connections = 1000
timeout = 180
keepalive = 2
backlog = 2048
accesslog = '-'
errorlog = '-'

Kesalahan:
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

Apakah solusi saat ini untuk menurunkan versi ke 19.7.1 ?

Adakah yang bisa membagikan repositori dengan instruksi penerapan yang dapat saya gunakan untuk mereproduksi masalah? Saya senang melihatnya, tetapi saya ingin memastikan bahwa saya tahu persis bagaimana cara mengaturnya.

Hai @tilgovi Fastapi menggunakan gunicorn di produksi.
Repositori ini memiliki versi minimal dan menunjukkan kesalahan yang sama. Anda dapat mencoba, saya telah mengalami kesalahan ini di App Engine. Saya tidak tahu apakah itu mereplikasi dengan lingkungan lain. Repositori itu, dapatkah membantu mereproduksi masalah?

Masalah yang sama di sini:
gunicorn 19.9.0 + GKE juga terjadi saat kita berhadapan dengan beban tinggi.

cmin

Tidak yakin, tapi semuanya tampak kembali normal sekarang.

Ini adalah aplikasi saya.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

Dan proses produksi 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

Jadi mungkin itu sesuatu yang sementara di GAE.

Saya memiliki masalah yang sama. Gunicorn dengan gevent, hanya Google HTTP LB di depan. (tidak ada Nginx, atau proxy terbalik lainnya). Barang berfungsi dengan baik selama berminggu-minggu tetapi sesekali saya mendapatkan:

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

Gunicorn 20.0.4.

Fakta bahwa beberapa orang melaporkan bahwa "terjadi di bawah beban tinggi" atau bahwa, dalam kasus saya, hal ini terjadi "beberapa kali per bulan" sepertinya ini adalah semacam kondisi balapan.

@JordanP untuk Anda memiliki kesalahan di sisi google? Bagaimana cara mengirim ping dari Google LB? Apakah waktu habis di sisi LB google?

Ini berjalan di Kubernetes, pemeriksaan kesehatan adalah HTTP, sangat konservatif (batas waktu 5 detik, 10 kegagalan berturut-turut sebelum menandai wadah mati).

Di sisi Google, LB HTTP di depan Gunicorn mengembalikan lebih dari 40k 502 kesalahan (dalam beberapa menit) dengan alasan berikut: "backend_timeout":
image

Saya mendapat 4 replika (4 kontainer), semuanya jatuh pada ~ waktu yang sama malam itu. Jadi, ini tebakan liar tapi mungkin Google harus me-restart load balancer mereka untuk menyebarkan versi baru, perbaikan, apa pun, itu semua perangkat lunak, jadi klien (seperti yang terlihat oleh Gunicorm) mungkin telah terputus dalam situasi yang tidak ramah/tidak- cara yang diharapkan. Bagaimanapun, Gunicorn harus tahan terhadap situasi klien apa pun yang terjadi.

Mengabaikan ENOTCONN terlihat oke-ish, dibahas untuk melakukannya secara langsung di beberapa modul Python stdlib, untuk beberapa operasi: https://bugs.python.org/issue30319#msg297643

Kesalahan yang sama.

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

Dua aplikasi labu (api dan antarmuka) dalam wadah buruh pelabuhan terpisah masing-masing menjalankan gunicorn. Kesalahan terjadi di Chrome/Chromium (bukan firefox), ketika saya memposting ke api melalui formulir di aplikasi antarmuka. Mungkin terhubung ke koneksi TCP preemtif Chrome . Karena nginx seharusnya dapat menangani ini, saya telah meletakkannya di depan wadah. Tidak ada yang berubah.

@uree pekerja yang mana? Bagaimana Anda meluncurkan gunicorn?

CMD ["gunicorn", " aplikasi:aplikasi ", "-b", "0.0.0.0:8001", "-t 90"]
Saya juga sudah mencoba
CMD ["gunicorn", " aplikasi:aplikasi ", "-b", "0.0.0.0:8001", "-t 90", "--preload"]

Saya melihat masalah yang sama ketika menjalankan Django dengan gunicorn dengan docker-compose di Digital Ocean.
Gunicorn versi 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

Kesalahan ini terjadi setiap 4-5 menit:

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

Kesalahan yang sama.

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

Dua aplikasi labu (api dan antarmuka) dalam wadah buruh pelabuhan terpisah masing-masing menjalankan gunicorn. Kesalahan terjadi di Chrome/Chromium (bukan firefox), ketika saya memposting ke api melalui formulir di aplikasi antarmuka. Mungkin terhubung ke koneksi TCP preemtif Chrome . Karena nginx seharusnya dapat menangani ini, saya telah meletakkannya di depan wadah. Tidak ada yang berubah.

Perbarui Dalam kasus saya masalahnya ada di tempat lain. Itu disebabkan oleh acara jquery onclick pada tombol kirim. Saya harus memposting secara tidak sinkron dengan ajax untuk menyelesaikan masalah.

Apakah ada pembaruan tentang kesalahan ini?

Apakah ada pembaruan tentang kesalahan ini?

baik Anda dapat menggambarkan konteks di mana hal itu terjadi? Juga untuk semua yang menggunakan kubernetes itu dapatkah Anda menjelaskan bagaimana pemeriksaan kesehatan Anda dikonfigurasi sehingga kami dapat mereproduksinya?

Apa yang membuatnya berpikir itu terkait dengan Kubernetes ? Tidak ada klien yang berperilaku buruk, koneksi setengah tertutup seharusnya benar-benar membuat crash pekerja Gunicorn, baik itu berjalan di Kubernetes, Mesos, docker, baremetal: Gunicorn paling tangguh.

Saya belum menemukan pereproduksi yang andal/mudah, tetapi jika saya menemukannya, saya pikir saya mungkin dapat membuat crash setiap server web gunicorn yang langsung terhubung ke Internet.

baik saya tidak pernah mengalami kecelakaan seperti itu ketika gunicorn berada di belakang nginx dan beberapa dikeluarkan
dilaporkan ada tampaknya terkait dengan kubernetes.

Pada pekerja mana itu terjadi? Apakah gunicorn digunakan di belakang proxy? Yang
satu?

Pada Selasa 10 Mar 2020 pukul 11:52 Jordan Pittier [email protected] menulis:

Apa yang membuatnya berpikir itu terkait dengan Kubernetes ? Tidak ada klien yang berperilaku buruk, setengah
koneksi tertutup seharusnya benar-benar membuat crash pekerja Gunicorn, baik
itu berjalan di Kubernetes, Mesos, docker, baremetal: Gunicorn most be
ulet.

Saya belum menemukan pereproduksi yang andal/mudah, tetapi jika saya menemukannya, saya pikir saya mungkin
dapat membuat crash setiap server web gunicorn yang langsung terpapar ke
Internet.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1913?email_source=notifications&email_token=AAADRITYFZI4GINCSG752OTRGYLXDA5CNFSM4GBYQQA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LOKN5WXHJKTOR5WV2ZGON5WXHJKTOR5
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAADRIRSO4T7WQTS6GMHLO3RGYLXDANCNFSM4GBYQQAQ
.

>

Dikirim dari Ponsel saya

Kesalahan yang sama dengan layanan aws ecs di belakang penyeimbang beban aws.
Terjadi sekali pada waktu yang sama pada semua replika (wadah/tugas)
Gunicorn sebagai paket pip. Tidak ada Nginx, tidak ada proxy.
Python 3.7.6
Versi Gunicorn: 20.0.4
Jalankan seperti:
gunicorn --bind 0.0.0.0:8000 --workers 1 --threads 5 --max-requests 100 --timeout 300 application.wsgi
Catatan:
[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

Apakah ada pembaruan tentang kesalahan ini?

baik Anda dapat menggambarkan konteks di mana hal itu terjadi? Juga untuk semua yang menggunakan kubernetes itu dapatkah Anda menjelaskan bagaimana pemeriksaan kesehatan Anda dikonfigurasi sehingga kami dapat mereproduksinya?

Saya tidak memiliki sesuatu yang spesifik. Kesalahan terjadi entah dari mana, tidak ada tindakan nyata yang terjadi yang menyebabkan kesalahan ini.
Di aplikasi Django selain titik akhir REST API biasa, ada penjadwal pekerjaan Django. Segala sesuatu yang lain dapat Anda lihat di docker-compose.yml.

Saya dapat memberikan beberapa data lagi. Saya melihat ini kadang-kadang dengan gunicorn 19.9.0 berjalan di belakang haproxy sebagai proxy terbalik (hanya menggunakan HTTP, tidak menggunakan protokol 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


Server menangani sekitar 30 permintaan/detik pada saat itu. Seperti yang Anda lihat, baris log pertama rusak, mungkin karena output buffer dan banyak pekerja.

Gunicorn sedang dijalankan dengan systemd: ExecStart=/var/venvs/software-venv/bin/gunicorn -b 0.0.0.0:6000 -w 4 app:app dan LimitNOFILE=49152 .

Saya mengirim permintaan tarik dengan perbaikan yang telah saya jalankan dalam produksi selama beberapa hari sekarang. Bug ini disebabkan oleh kondisi balapan, di mana soket dapat ditutup (oleh klien, OS, dll.) sebelum getpeername() dipanggil, sehingga memunculkan pengecualian dengan benar. Namun, gunicorn tidak menangkap pengecualian ini, jadi itu menggelegak dan merusak server. Perbaikan saya hanya untuk menangkap pengecualian dan menaikkannya sebagai pengecualian NoMoreData, yang sudah ditangani oleh kode lain lebih jauh dari tumpukan. Ini mencegah pemutusan yang tidak tepat waktu agar tidak membuat server mogok.

Saya menggunakan Kubernetes(1.16.8-gke.15) dan Gunicorn terbaru (20.0.4), dan Python 3.7. Jika saya membuat permintaan POST dan menambah waktu tunda dimulai dengan 1 detik untuk setiap iterasi, itu berhenti bekerja ketika penundaan adalah 360 detik. Pekerjaan di dalam Gunicorn selesai, dan beberapa menit kemudian mengembalikan kesalahan ini:

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

Saat koneksi terputus antara Kubernetes dan Gunicorn, titik akhir Kubernetes dan klien masih terhubung. Pemeriksaan kesehatan terlihat bagus, tetapi mungkin ada kesalahan konfigurasi. Saya belum menemukan log apa pun di sisi Kubernetes untuk mengidentifikasi masalah.

Saya memiliki hasil yang sama untuk Gunicorn (19.7.1).

Saya telah menambahkan tanda batas waktu untuk Gunicorn, dan saya menggunakan Loadbalancer GKE default dengan BackendConfig untuk Kubernetes GKE . Saya juga sudah mencoba dengan NGINX Ingress dan menambahkan anotasi untuk menangani batas waktu apa pun. Perintah Gunicorn:

gunicorn --bind="0.0.0.0:5000" --workers=1 --timeout=1200 --keep-alive=1200 main:app

Ketika saya menjalankan Gunicorn secara lokal tanpa apa pun di depannya, itu berfungsi dengan baik. Ini mungkin lebih merupakan masalah Kubernetes , namun, responsnya hilang.

Apakah ada yang beruntung dengan masalah ini? Atau cara yang bagus untuk men-debugnya?

Versi Docker 19.03.8, buat afacb8b7f0

Python 3.8.2 (default, 26 Februari 2020, 15:09:34)
[GCC 8.3.0] di 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

Dalam kasus saya, saya telah menemukan bahwa setiap permintaan HEAD memancarkan ini.

Saya menggunakan Django di belakang gunicorn, dan saya menduga bahwa aplikasi ingin menulis badan respons, (seharusnya tidak), tetapi saya belum mengonfirmasi bahwa itu masalahnya.

perilaku yang sama

Saya pikir ini mungkin diperbaiki oleh # 2277

Dalam kasus saya, modul wait_for Ansible adalah penyebabnya.

Saya menggunakan Ansible untuk menggunakan server gunicorn + flask (khususnya Python 3.6.12, gunicorn 19.9.0, Flask 1.4.1).

Setelah memulai layanan, saya menggunakan modul wait_for untuk memastikan layanan aktif dan berjalan.
Modul ini mungkin memutuskan koneksi segera setelah memvalidasi layanan (tidak menunggu respon gunicorn) dan dengan demikian, gunicorn memunculkan kesalahan ini.

Saya kira sistem pemantauan lain melakukan hal yang sama.

Saya mendapat kesalahan yang sama .. hmm
Saat ini kami mendapat lalu lintas yang sangat besar.. 100-1000 TPS, dan beberapa permintaan gagal secara acak

Python 3.8
Labu
gunicorn

Dengan properti buruh pelabuhan di bawah ini ..

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

Ada solusi?

Apakah ada pembaruan tentang ini?
Tampaknya ada beberapa PR untuk memperbaikinya, apakah kita memiliki garis waktu untuk merilisnya?
Screenshot 2020-12-14 at 12 45 42

Hai @tilgovi
Apakah kami memiliki timeline untuk merilis versi baru ini? sepertinya paket gunicorn lama tidak update...
image

Saya akan membuat rilis mungkin hari ini. saya akan memeriksa kembali masalah enotconn ini karena saya tidak senang dengan solusi yang dilakukan. @tilgovi memiliki perbaikan lain yang dapat diuji.

?

apakah Anda menguji tambalan lain untuk membantu?

terima kasih, saya ingin tahu apakah ada info pembaruan tentang paket pip?

@yehjames apakah master bekerja untuk Anda? Sebuah rilis direncanakan sekarang hari ini. Tetapi umpan balik apa pun tentang cara kerja master pada platform yang berbeda diterima.

@benoitc Adakah pembaruan tentang ini? Menggunakan 20.0.4 dalam produksi dan menerapkan perubahan yang disarankan oleh @asantoni (sebagai patch monyet) untuk menghindari seringnya crash. Tetapi pemindaian kode statis Veracode tidak menyukai tambalan, jadi coba perbaiki sekarang. Terima kasih!

Kami akan bekerja untuk mengeluarkan rilis secepat kami bisa. Kami tidak dapat menjanjikan satu hari pun, tetapi kami sedang bekerja untuk mencari tahu apa yang tersisa untuk rilis ini dan untuk meningkatkan manajemen rilis di masa mendatang.

Silakan gunakan fitur "Tonton" GitHub untuk repositori dan perhatikan rilis jika Anda ingin diberi tahu.

Hai. Saya mengalami Masalah yang sama dengan HAProxy + Gunicorn + Django.

Backend HAProxy saya kehilangan hampir semua servernya karena pemeriksaan tidak ditanggapi dan log Gunicorn terganggu dengan:

[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

Saya bekerja dengan gunicorn==20.0.4, Django==3.1.5, HA-Proxy versi 2.2.11-1ppa1~bionic

Ada petunjuk tentang cara melanjutkan?

Ini pada mode TCP, tanpa SSL, pada Locust Stress Testing.

Seseorang tolong bagikan solusi tentang masalah ini

@krishnamanchikalapudi @ricarhincapie tolong tingkatkan ke rilis terbaru Gunicorn :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat