Gunicorn Django[关键]工作线程超时

Gunicorn Django[关键]工作线程超时,django,gunicorn,Django,Gunicorn,由于我安装了一个pip的google api python客户端,我让我的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 --

由于我安装了一个pip的google api python客户端,我让我的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
我试着让param——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)
[2016-06-13 21:09:52+0000][15602][INFO]工人退出(pid:15602)
[2016-06-13 21:09:52+0000][15601][错误]工人流程中的异常
回溯(最近一次呼叫最后一次):
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/arbiter.py”,第557行,在spawn_worker中
worker.init_进程()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/workers/base.py”,第126行,在初始化过程中
self.load_wsgi()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/workers/base.py”,第136行,在load\u wsgi中
self.wsgi=self.app.wsgi()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/app/base.py”,第67行,在wsgi中
self.callable=self.load()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/app/djangoapp.py”,第106行,已加载
返回mod.make_wsgi_应用程序()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/app/django_wsgi.py”,make_wsgi_应用程序第37行
如果获取验证错误:
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/core/management/validation.py”,第35行,在get\u validation\u errors中
对于get_app_errors()中的(app_name,error)。项()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/db/models/loading.py”,第166行,在get\u app\u errors中
自我.()
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/db/models/load.py”,第72行,在
self.load\u应用程序(应用程序名称,True)
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/db/models/loading.py”,第96行,加载应用程序中
模型=导入模块('.models',应用程序名称)
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/utils/importlib.py”,导入模块第35行
__导入(名称)
文件“/home/myapp/prod/apps/admin/models.py”,第5行,在
从django.contrib.auth.models导入用户
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/contrib/auth/models.py”,第18行,在
从django.contrib.auth.hasher导入(
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/contrib/auth/hasher.py”,第8行,在
从django.test.signals导入设置\u更改
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/test/_init__.py”,第6行,在
从django.test.testcases导入(TestCase、TransactionTestCase、,
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/test/testcases.py”,第35行,在
从django.test导入_doctest作为doctest
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/django/test/_doctest.py”,第104行,在
导入unittest、difflib、pdb、tempfile
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/pdbpp-0.7.2-py2.7.egg/pdb.py”,第38行,在
pdb=从标准数据库(pdb)导入
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/pdbpp-0.7.2-py2.7.egg/pdb.py”,第35行,从标准数据库导入
mydict=execfile(pyfile,result.\uu dict\uu)
文件“/usr/local/lib/python2.7/pdb.py”,第3行,在
“”“Python调试器。”“”
文件“/usr/local/lib/python2.7/pdb.py”,第3行,在
“”“Python调试器。”“”
文件“/home/myapp/.local/share/virtualenvs/myapp/lib/python2.7/site packages/gunicorn/debug.py”,第40行,在调用中__
line=src[lineno]
索引器错误:元组索引超出范围
[2016-06-13 21:09:52+0000][15601][INFO]工人退出(pid:15601)
由于问题是在我安装google api客户端的同时出现的,我怀疑pip升级了一些与我的gunicorn或Django不兼容的LIB。我也检查了pip日志,但没有成功

如果我用runserver运行Django应用程序,我看不到任何bug,它似乎与Gunicorn非常相关


有没有更深入的方法来调试Gunicorn?

经过几个小时的努力,我终于在pip日志(HOME/.pip/pip.log)中找到了一条线索

安装google api客户端升级了我以前的一些LIB,如下所示:

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:
我还注意到一些cyptography的安装警告。我决定把旧的libs放回去

  • pyopenssl0.14
  • 六个1.9.0
  • 密码学0.7.1
我不知道这是pyopenssl还是加密技术,但是有这些libs问题真的很无聊

希望这将有助于下一次的人