Saya mengalami masalah ini pada gambar raspbian
[2018-09-10 20:40:11 +0800] [21421] [KRITIS] TIMEOUT PEKERJA (pid:21699)
[2018-09-10 20:40:11 +0800] [21699] [ERROR] Permintaan pemrosesan kesalahan soket.
Traceback (panggilan terakhir terakhir):
File "/usr/lib/python3/dist-packages/gunicorn/workers/async.py", baris 62, di handle
six.reraise(*sys.exc_info())
File "/usr/lib/python3/dist-packages/gunicorn/six.py", baris 625, di reraise
meningkatkan nilai
File "/usr/lib/python3/dist-packages/gunicorn/workers/async.py", baris 35, di handle
listener_name = pendengar.getsockname()
OSError: [Errno 9] Deskriptor file buruk
@leond08 Terima kasih untuk tiketnya!
Untuk memahami bagaimana hal itu terjadi, dapatkah Anda memberikan sedikit info lebih lanjut?
Saya menggunakan gunicorn3 versi terbaru
Saya menggunakan eventlet dan gevent untuk ini
saya menjalankan aplikasi labu saya - Flask-SocketIO
Saya memulai tugas latar belakang saya setelah pengguna mengklik tombol
Fungsi tugas latar belakang saya adalah mendengarkan suatu acara,
setelah mengklik tombol "SELESAI" tugas latar belakang harus berhenti
lalu kirim pesan emisi ke semua pengguna
Punya masalah yang sama dengan aiohttp + gunicorn, amati pesan yang sama setiap kali ctrl + c.
[INFO] Kesalahan saat menutup soket [Errno 9] Deskriptor file buruk
Saya tidak mereproduksinya. Saya menduga aplikasi Anda menutup beberapa fds yang menimbulkan masalah di atas.
Kami mengalami masalah yang sama, hanya saja itu hanya terjadi pada 1 dari 8 kontainer yang berjalan di kawanan buruh pelabuhan.
Kami telah mengalami masalah yang sama dengan 1 dari 9 wadah, sepertinya terkait dengan buruh pelabuhan dan python3 dan gevent.
gunicorn 20.0.4 + aiohttp 3.6.2
Gunicorn berjalan sebagai server dev:
gunicorn --reload app:make_app --bind localhost:5000 --worker-class aiohttp.GunicornWebWorker --workers 2 --access-logfile -
Hampir setiap Ctrl+C diakhiri dengan
^C[2020-05-23 21:49:50 +0200] [38524] [INFO] Handling signal: int
Exception ignored when trying to write to the signal wakeup fd:
Exception ignored when trying to write to the signal wakeup fd:
Traceback (most recent call last):
File "/usr/lib/python3.8/asyncio/unix_events.py", line 42, in _sighandler_noop
Traceback (most recent call last):
File "/usr/lib/python3.8/asyncio/unix_events.py", line 42, in _sighandler_noop
def _sighandler_noop(signum, frame):
def _sighandler_noop(signum, frame):
OSError: [Errno 9] Bad file descriptor
OSError: [Errno 9] Bad file descriptor
[2020-05-23 21:49:50 +0200] [38526] [INFO] Worker exiting (pid: 38526)
[2020-05-23 21:49:50 +0200] [38528] [INFO] Worker exiting (pid: 38528)
[2020-05-23 21:49:50 +0200] [38524] [INFO] Shutting down: Master
Tidak masalah jika aplikasi menangani permintaan apa pun atau tidak.
Dengan Sanic 20.3.0:
^C[2020-05-26 13:24:55 +0200] [27706] [INFO] Handling signal: int
[2020-05-26 13:24:55 +0200] [27769] [INFO] Stopping server: 27769, connections: 0
[2020-05-26 13:24:55 +0200] [27769] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-05-26 13:24:55 +0200] [27769] [INFO] Worker exiting (pid: 27769)
[2020-05-26 13:24:55 +0200] [27771] [INFO] Stopping server: 27771, connections: 0
[2020-05-26 13:24:55 +0200] [27771] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-05-26 13:24:55 +0200] [27771] [INFO] Worker exiting (pid: 27771)
[2020-05-26 13:24:55 +0200] [27706] [INFO] Shutting down: Master
Sama di sini dengan kelas pekerja Gunicorn 20.0.4 + Uvicorn 0.11.5 di setiap Ctrl+C
INFO: [12621] [gunicorn.error] Handling signal: int
INFO: [12635] [gunicorn.error] Error while closing socket [Errno 9] Bad file descriptor
INFO: [12634] [gunicorn.error] Error while closing socket [Errno 9] Bad file descriptor
INFO: [12635] [gunicorn.error] Worker exiting (pid: 12635)
INFO: [12634] [gunicorn.error] Worker exiting (pid: 12634)
INFO: [12621] [gunicorn.error] Shutting down: Master
ada contoh aplikasinya? Juga versi Python mana yang sedang kita bicarakan?
Ubuntu 20.04, sistem menyediakan Python 3.8.2 di virtualenv
Contoh aplikasi: https://github.com/zgoda/newsloop-server/tree/d603a1c10c9e8be3d998f62ccc55dd73f4677115 (dengan aiohttp) atau https://github.com/zgoda/newsloop-server/tree/b2a8a7f09fa9848d0384b51a3f6c459bbe (dengan Sanic). Doa gunicorn yang tepat di komentar saya sebelumnya.
Perbedaan output antara aiohttp dan Sanic membuat saya curiga bahwa ada yang salah dengan pekerja.
Masalah yang sama, python 3.8.0
sanic 19.12.2
gunicorn 20.0.4
Sunting: ini terjadi ketika saya menjalankan secara lokal di Mac saya, tetapi tidak ketika berjalan di dalam buruh pelabuhan Linux, mungkin bisa membantu Anda
Halo,
Saya kira masalah ini https://github.com/benoitc/gunicorn/issues/2064 memiliki alasan yang sama.
Kami memiliki kesalahan yang hampir sama seperti dalam masalah, tetapi kami menggunakan gunicorn - 19.9.0
Saya juga mengalami ini, FastAPI + pekerja Gunicorn dan uvicorn terbaru dengan Python 3.8.5
Segera setelah saya berhenti menggunakan uvicorn (yaitu, hapus baris ini dari konfigurasi gunicorn saya):
worker_class = "uvicorn.workers.UvicornWorker"
Kesalahan menghilang.
Seperti dijelaskan di atas, ini terjadi saat menghentikan Gunicorn dengan Ctrl+C atau mengirim sinyal kill yang anggun ke PID.
[2020-09-12 11:56:37 +1000] [100390] [INFO] Starting gunicorn 20.0.4
[2020-09-12 11:56:37 +1000] [100390] [INFO] Listening at: http://0.0.0.0:6000 (100390)
[2020-09-12 11:56:37 +1000] [100390] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2020-09-12 11:56:37 +1000] [100392] [INFO] Booting worker with pid: 100392
[2020-09-12 11:56:38 +1000] [100392] [INFO] Started server process [100392]
[2020-09-12 11:56:38 +1000] [100392] [INFO] Waiting for application startup.
[2020-09-12 11:56:38 +1000] [100392] [INFO] Application startup complete.
[2020-09-12 11:56:48 +1000] [100390] [INFO] Handling signal: term
[2020-09-12 11:56:48 +1000] [100392] [INFO] Shutting down
[2020-09-12 11:56:48 +1000] [100392] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-09-12 11:56:48 +1000] [100392] [INFO] Waiting for application shutdown.
[2020-09-12 11:56:48 +1000] [100392] [INFO] Application shutdown complete.
[2020-09-12 11:56:48 +1000] [100392] [INFO] Finished server process [100392]
[2020-09-12 11:56:48 +1000] [100392] [INFO] Worker exiting (pid: 100392)
[2020-09-12 11:56:48 +1000] [100390] [INFO] Shutting down: Master
Berikut adalah replikasi yang tepat dari masalah ini:
[fots<strong i="6">@workstation</strong> testing]$ python3.8 -V
Python 3.8.5
[fots<strong i="7">@workstation</strong> testing]$ python3.8 -m venv ~/.virtualenv/testing
[fots<strong i="8">@workstation</strong> testing]$ source ~/.virtualenv/testing/bin/activate
(testing) [fots<strong i="9">@workstation</strong> testing]$ pip install fastapi gunicorn uvicorn
Collecting fastapi
Using cached fastapi-0.61.1-py3-none-any.whl (48 kB)
Collecting gunicorn
Using cached gunicorn-20.0.4-py2.py3-none-any.whl (77 kB)
Collecting uvicorn
Using cached uvicorn-0.11.8-py3-none-any.whl (43 kB)
Collecting pydantic<2.0.0,>=1.0.0
Using cached pydantic-1.6.1-cp38-cp38-manylinux2014_x86_64.whl (11.5 MB)
Collecting starlette==0.13.6
Using cached starlette-0.13.6-py3-none-any.whl (59 kB)
Requirement already satisfied: setuptools>=3.0 in /home/fots/.virtualenv/testing/lib/python3.8/site-packages (from gunicorn) (47.1.0)
Collecting h11<0.10,>=0.8
Using cached h11-0.9.0-py2.py3-none-any.whl (53 kB)
Collecting websockets==8.*
Using cached websockets-8.1-cp38-cp38-manylinux2010_x86_64.whl (78 kB)
Collecting httptools==0.1.*; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy"
Using cached httptools-0.1.1-cp38-cp38-manylinux1_x86_64.whl (227 kB)
Collecting uvloop>=0.14.0; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy"
Using cached uvloop-0.14.0-cp38-cp38-manylinux2010_x86_64.whl (4.7 MB)
Collecting click==7.*
Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Installing collected packages: pydantic, starlette, fastapi, gunicorn, h11, websockets, httptools, uvloop, click, uvicorn
Successfully installed click-7.1.2 fastapi-0.61.1 gunicorn-20.0.4 h11-0.9.0 httptools-0.1.1 pydantic-1.6.1 starlette-0.13.6 uvicorn-0.11.8 uvloop-0.14.0 websockets-8.1
WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available.
You should consider upgrading via the '/home/fots/.virtualenv/testing/bin/python3.8 -m pip install --upgrade pip' command.
(testing) [fots<strong i="10">@workstation</strong> testing]$ ls -l
total 4
-rw-rw-r-- 1 fots fots 117 Sep 12 12:13 main.py
(testing) [fots<strong i="11">@workstation</strong> testing]$ cat main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
(testing) [fots<strong i="12">@workstation</strong> testing]$ gunicorn -k uvicorn.workers.UvicornWorker main:app
[2020-09-12 12:19:05 +1000] [105788] [INFO] Starting gunicorn 20.0.4
[2020-09-12 12:19:05 +1000] [105788] [INFO] Listening at: http://127.0.0.1:8000 (105788)
[2020-09-12 12:19:05 +1000] [105788] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2020-09-12 12:19:05 +1000] [105790] [INFO] Booting worker with pid: 105790
[2020-09-12 12:19:05 +1000] [105790] [INFO] Started server process [105790]
[2020-09-12 12:19:05 +1000] [105790] [INFO] Waiting for application startup.
[2020-09-12 12:19:05 +1000] [105790] [INFO] Application startup complete.
^C[2020-09-12 12:19:06 +1000] [105788] [INFO] Handling signal: int
[2020-09-12 12:19:06 +1000] [105790] [INFO] Shutting down
[2020-09-12 12:19:06 +1000] [105790] [INFO] Error while closing socket [Errno 9] Bad file descriptor
[2020-09-12 12:19:06 +1000] [105790] [INFO] Waiting for application shutdown.
[2020-09-12 12:19:06 +1000] [105790] [INFO] Application shutdown complete.
[2020-09-12 12:19:06 +1000] [105790] [INFO] Finished server process [105790]
[2020-09-12 12:19:06 +1000] [105790] [INFO] Worker exiting (pid: 105790)
[2020-09-12 12:19:07 +1000] [105788] [INFO] Shutting down: Master
Dan inilah output pip freeze
:
click==7.1.2
fastapi==0.61.1
gunicorn==20.0.4
h11==0.9.0
httptools==0.1.1
pydantic==1.6.1
starlette==0.13.6
uvicorn==0.11.8
uvloop==0.14.0
websockets==8.1
Saya mencoba menginstal uvicorn dan gunicorn dari GitHub (cabang master) untuk memastikan saya mendapatkan perbaikan terbaru tetapi masalahnya tetap ada.
Semoga ini membantu
fotis
gunicorn
dan uvicorn
. Pesan kesalahan ini mulai terjadi dengan uvicorn==0.11.4
dan bukan versi sebelumnya 0.11.3
(baik di OSx dan di wadah Linux). Ini konsisten dengan laporan di atas dengan uvicorn, di mana versi yang dilaporkan selalu lebih besar dari 0.11.4
. Bukti di akhiruvicorn
starlette
dan fastapi
di atas tumpukan gunicorn+uvicorn
seperti yang dilaporkan di atas; - menjalankan versi uvicorn terbaru 12.X
alih-alih 0.11.4
; - menjalankan gunicorn
dengan lebih dari satu uvicorn
pekerjaBukti . Di folder baru di osx, jalankan skrip terlampir test.sh
(diuji di osx). Untuk pengujian di wadah Linux, simpan skrip dan Dockerfile, lalu baca header Dockerfile. Saya juga melampirkan log skrip.
@benoitc , apa pendapat Anda tentang komit ini di uvicorn
yang tampaknya memperkenalkan bug? Masalahnya tampaknya ada di antarmuka antara gunicorn
dan uvicorn
. Bisakah Anda mengomentari urutan 2 blok kode yang diubah dalam komit yang disebutkan di atas dalam uvicorn
? Ini dapat membantu mencari tahu mengapa ini terjadi dengan kasus lain juga. Sejauh ini telah dilaporkan juga dengan aiohttp
, gevent
, Flask-SocketIO
sanic
. Saya lampirkan juga log scriptnya untuk memudahkan.
file _test.sh_
#!/bin/bash
python3 -m venv venv
source venv/bin/activate
pip install gunicorn==20.0.04 uvicorn==0.11.4
# create simple uvicorn app
printf "async def app(scope, receive, send):\n await send()\n" > example.py
# spin up gunicorn with 1 uvicorn worker, and then send TERM signal to gunicorn
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn
sleep 1
# you will see 1 log entry like this one:
# [XX] [YY] [INFO] Error while closing socket [Errno 9] Bad file descriptor
printf "\n\n[INFO] if you instead bump down uvicorn's version from 11.4 to 11.3 [Errno 9] goes away:\n\n"
pip install uvicorn==0.11.3
gunicorn example:app -w 1 -k uvicorn.workers.UvicornWorker &
sleep 5 && pkill -f gunicorn
file _Dockerfile_
# run with:
# docker run -it $(docker build -q .)
FROM python:3.8
COPY test.sh .
RUN chmod +x /test.sh
CMD /test.sh
Saya memiliki masalah yang sama persis. Ini kasus saya.
Singkat : Saya mencoba membuat aplikasi uji untuk Django dwebsocket dengan gunicorn. Ketika saya mencoba menggunakan websocket_client untuk menguji hasilnya, setelah menutup websocket kesalahan ini terjadi setiap saat.
Lingkungan :
Gambar buruh pelabuhan : python:3.7
versi python: python3.7.6
gunicorn : versi = 20.0.4, pekerjaan = gevent
Versi Django : Django==2.2
versi dwebsocket : 0.5.12
Kode:
lihat.py
from dwebsocket import accept_websocket
<strong i="16">@accept_websocket</strong>
def my_ws(request):
if request.is_websocket():
ws = request.websocket
while True:
msg = ws.wait(timeout=15)
if msg is None:
print('get None message')
break
else:
msg = b'echo :' + msg
ws.send(msg)
print('send ws seccess')
print('websocket close')
urls.py
from websocketInfo.views import my_ws
from django.conf.urls import url
urlpatterns = [
url(r'my_ws/$', my_ws, name='my_ws')
]
websocket_client
from websocket import create_connection
ws = create_connection("ws://127.0.0.1:8080/my_ws/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Receiving...")
result = ws.recv()
print(result)
ws.close()
print('ws close')
perintah untuk menjalankan server gunicorn
gunicorn MyWebsocket.wsgi -b 0.0.0.0:8000 -w 3 -k gevent
keluaran kesalahan
send ws seccess
get None message
websocket close
[2021-01-13 02:43:56 +0000] [101] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 65, in handle
util.reraise(*sys.exc_info())
File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 55, in handle
self.handle_request(listener_name, req, client, addr)
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/ggevent.py", line 143, in handle_request
super().handle_request(listener_name, req, sock, addr)
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 128, in handle_request
util.reraise(*sys.exc_info())
File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base_async.py", line 114, in handle_request
resp.write(item)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 326, in write
self.send_headers()
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 322, in send_headers
util.write(self.sock, util.to_bytestring(header_str, "latin-1"))
File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 286, in write
sock.sendall(data)
File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 523, in sendall
return _socketcommon._sendall(self, data_memory, flags)
File "/usr/local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 367, in _sendall
chunk_size = max(socket.getsockopt(SOL_SOCKET, SO_SNDBUF), 1024 * 1024)
File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 156, in __getattr__
return getattr(self._sock, name)
File "/usr/local/lib/python3.7/site-packages/gevent/_socket3.py", line 66, in _dummy
raise OSError(EBADF, 'Bad file descriptor')
OSError: [Errno 9] Bad file descriptor
@ChrisXiaoShu Jejak tumpukan yang Anda posting memberi tahu kami bahwa objek soket khusus ini telah ditutup secara eksplisit di tingkat Python (saat itulah gevent menggunakan _dummy
untuk menghasilkan pengecualian yang sama dengan yang dilakukan sistem operasi). Ini berarti beberapa bagian dari tumpukan aplikasi Anda menutup soket sebelum mengembalikan respons untuk membiarkan gunicorn menanganinya; pada saat kesalahan terjadi, gunicorn bahkan belum mengirim header respons HTTP.
Jenis masalah yang sama dalam kasus saya, dengan perbedaan bahwa kesalahan ini terjadi tanpa melakukan apa pun. Terkadang setelah 5 menit, terkadang setelah 2 jam...
Komentar yang paling membantu
gunicorn
danuvicorn
. Pesan kesalahan ini mulai terjadi denganuvicorn==0.11.4
dan bukan versi sebelumnya0.11.3
(baik di OSx dan di wadah Linux). Ini konsisten dengan laporan di atas dengan uvicorn, di mana versi yang dilaporkan selalu lebih besar dari0.11.4
. Bukti di akhiruvicorn
starlette
danfastapi
di atas tumpukangunicorn+uvicorn
seperti yang dilaporkan di atas; - menjalankan versi uvicorn terbaru12.X
alih-alih0.11.4
; - menjalankangunicorn
dengan lebih dari satuuvicorn
pekerjaBukti . Di folder baru di osx, jalankan skrip terlampir
test.sh
(diuji di osx). Untuk pengujian di wadah Linux, simpan skrip dan Dockerfile, lalu baca header Dockerfile. Saya juga melampirkan log skrip.@benoitc , apa pendapat Anda tentang komit ini di
uvicorn
yang tampaknya memperkenalkan bug? Masalahnya tampaknya ada di antarmuka antaragunicorn
danuvicorn
. Bisakah Anda mengomentari urutan 2 blok kode yang diubah dalam komit yang disebutkan di atas dalamuvicorn
? Ini dapat membantu mencari tahu mengapa ini terjadi dengan kasus lain juga. Sejauh ini telah dilaporkan juga denganaiohttp
,gevent
,Flask-SocketIO
sanic
. Saya lampirkan juga log scriptnya untuk memudahkan.log_test.log
file _test.sh_
file _Dockerfile_