web-dev-qa-db-ja.com

gunicornがsys.exit(1)を呼び出すのはなぜですか?

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
11
Joshua Fox

@maxmに書かれているように、サーバーはSIGABRTをキャッチしています。その呼び出しは一般的に タイムアウト時に発生します です。

タイムアウト値を増やすか、要求の処理時間を減らす必要があります。また シグナルハンドラを設定できます タイムアウト後にワーカーで何が起こったかをログに記録しようとします。

5