为什么 gunicorn 调用 sys.exit(1)?

Why is gunicorn calling sys.exit(1)?

Gunicorn 有时会使我的服务器崩溃,实际上是用 sys.exit(1) 退出 Python 解释器!为什么是这样?请注意,故障并不总是在同一点。在下面显示的两种情况下,在 gunicorn 的 exit 之前有一个不同的最后代码行。此代码 运行 这里是 openpyxl ,它不应该导致解释器关闭!

服务器运行内存不足吗?其他原因?

(这是 Google 容器引擎中 Docker 上 Gunicorn 上的 Flask。)

案例一

  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

案例二

  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,通常调用 happens on timeout

您应该增加超时值或减少请求处理时间。还 you can setup the signal handler 尝试记录超时后 worker 中发生的事情。