Gunicornがサーバーをクラッシュさせることがあり、実際にPythonインタプリタをsys.exit(1)
で終了します!これはなぜですか?失敗は常に同じ時点で発生するわけではないことに注意してください。以下に示すように、gunicornのexit
の前に別の最後のコードラインがあります。ここで実行されているこのコードはopenpyxlであり、インタープリターのシャットダウンを引き起こしてはいけません!
サーバーのメモリが不足していますか?他の原因?
(これはFlask Google Container EngineのDocker上のGunicornです。)
事例1
File "/virtualenv_for_docker/lib/python3.7/site-packages/openpyxl/descriptors/base.py", line 166, in __set__
super(Bool, self).__set__(instance, value)
File "/virtualenv_for_docker/lib/python3.7/site-packages/gunicorn/workers/base.py", line 196, in handle_abort
sys.exit(1)
SystemExit: 1
事例2
File "/virtualenv_for_docker/lib/python3.7/site-packages/openpyxl/descriptors/serialisable.py", line 164, in __eq__
def __eq__(self, other):
File "/virtualenv_for_docker/lib/python3.7/site-packages/gunicorn/workers/base.py", line 196, in handle_abort
sys.exit(1)
SystemExit: 1
@maxmに書かれているように、サーバーはSIGABRT
をキャッチしています。その呼び出しは一般的に タイムアウト時に発生します です。
タイムアウト値を増やすか、要求の処理時間を減らす必要があります。また シグナルハンドラを設定できます タイムアウト後にワーカーで何が起こったかをログに記録しようとします。