Gunicorn Django [CRITICAL] WORKER TIMEOUT

3
自从我执行了pip install google-api-python-client命令后,我的Gunicorn工作进程会在超时后停止。
Django==1.5.3
Gunicorn==0.12.2
我不确定是否是由于pip安装的问题,但我除了进行一个数据库迁移之外没有做其他特殊操作,这个迁移也没有出现任何错误。
我使用以下命令来启动Gunicorn:
gunicorn_django myapp.py --bind 127.0.0.1:8181 --timeout 120 --log-file /tmp/myapp.gunicorn.log --log-level info --workers 8 --pid /tmp/myapp.pid

我尝试使用参数--spew进行跟踪,但它并没有帮助我:

[2016-06-13 21:09:52 +0000] [15602] [INFO] Worker exiting (pid: 15602)
[2016-06-13 21:09:52 +0000] [15601] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/app/djangoapp.py", line 106, in load
    return mod.make_wsgi_application()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/app/django_wsgi.py", line 37, in make_wsgi_application
    if get_validation_errors(s):
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/db/models/loading.py", line 166, in get_app_errors
    self._populate()
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/db/models/loading.py", line 72, in _populate
    self.load_app(app_name, True)
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/db/models/loading.py", line 96, in load_app
    models = import_module('.models', app_name)
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/myapp/prod/apps/admin/models.py", line 5, in <module>
    from django.contrib.auth.models import User
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/contrib/auth/models.py", line 18, in <module>
    from django.contrib.auth.hashers import (
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/contrib/auth/hashers.py", line 8, in <module>
    from django.test.signals import setting_changed
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/test/__init__.py", line 6, in <module>
    from django.test.testcases import (TestCase, TransactionTestCase,
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/test/testcases.py", line 35, in <module>
    from django.test import _doctest as doctest
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/django/test/_doctest.py", line 104, in <module>
    import unittest, difflib, pdb, tempfile
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/pdbpp-0.7.2-py2.7.egg/pdb.py", line 38, in <module>
    pdb = import_from_stdlib('pdb')
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/pdbpp-0.7.2-py2.7.egg/pdb.py", line 35, in import_from_stdlib
    mydict = execfile(pyfile, result.__dict__)
  File "/usr/local/lib/python2.7/pdb.py", line 3, in <module>
    """A Python debugger."""
  File "/usr/local/lib/python2.7/pdb.py", line 3, in <module>
    """A Python debugger."""
  File "/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site-packages/gunicorn/debug.py", line 40, in __call__
    line = src[lineno]
IndexError: tuple index out of range
[2016-06-13 21:09:52 +0000] [15601] [INFO] Worker exiting (pid: 15601)

由于问题与我安装google api客户端的时间相同,我怀疑pip升级了一些库,这些库与我的gunicorn或Django不兼容。我检查了pip日志,但没有成功。
如果我使用runserver运行我的Django应用程序,则看不到任何错误,这似乎与Gunicorn密切相关。
是否有更深入的方法来调试Gunicorn?
1个回答

1

在苦苦挣扎了几个小时后,我终于在pip日志(HOME/.pip/pip.log)中找到了线索。

安装谷歌API客户端升级了我之前的一些库,例如:

Installing collected packages: pyopenssl, six, cryptography, idna, pyasn1, setuptools, enum34, ipaddress, cffi, pycparser
  Found existing installation: pyOpenSSL 0.14
    Uninstalling pyOpenSSL:
...
  Found existing installation: six 1.9.0
    Uninstalling six:
...
  Found existing installation: cryptography 0.7.1
    Uninstalling cryptography:

我还注意到了一些有关密码学安装的警告。 我决定重新安装旧的库。
  • pyOpenSSL 0.14
  • six 1.9.0
  • cryptography 0.7.1
这解决了问题。 我不知道是pyopenssl还是cryptography,但是拥有所有这些库的问题真的很无聊。
希望这能帮助下一位需要的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接