Sur*_*raj 14 django mod-wsgi apache2
系统配置:Apache2、Django 1.10、Python 3、Ubuntu 16.04 LTS
姜戈debug=True
。
/var/log/apache2/error.log
[52:53.057967] [wsgi:error] [pid 4303] [client 1.1.1.22:24409] Timeout when reading response headers from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4305] [client 1.1.1.10:9787] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466729] [wsgi:error] [pid 4304] [client 1.1.1.4:18417] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4307] [client 1.1.1.22:35116] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466756] [wsgi:error] [pid 4306] [client 1.1.1.22:19242] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467164] [wsgi:error] [pid 4336] [client 1.1.1.4:34187] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467212] [wsgi:error] [pid 4342] [client 1.1.1.22:28212] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py, referer: http://example.org/
[52:58.467282] [wsgi:error] [pid 4331] [client 1.1.1.22:31045] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467426] [wsgi:error] [pid 4341] [client 1.1.1.70:22784] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py, referer: http://example.org/
Run Code Online (Sandbox Code Playgroud)
我不知道错误的原因。但我已将其范围缩小到 Django wsgi 进程。由于服务器正确托管静态文件。
虽然 Cloudflare 有时会显示 502:Bad Gateway Error,但服务器本身会显示 500:Internal Server Error。
我已经尝试重新启动服务器并检查 Django 的(调试)日志文件。Django 日志文件中没有错误信息(根本没有)。
我应该如何调试问题?由于 Django 没有记录任何内容,我认为问题可能是在 wsgi 中引起的。
注意:服务器之前运行良好。我做了一些更改*(已恢复原样);Django shell 工作正常。
变化*
在其他类似问题中,问题是在上传大文件时引起的。
Sur*_*raj 12
问题的原因是numpy。
众所周知,Python C 扩展模块(如 numpy)在 mod_wsgi 下使用时会导致超时。
来源:Sean F在从守护进程读取响应标头时回答超时
我在初始搜索中没有找到的类似问题由作者回答和解释mod_wsgi
说-
一些使用 C 扩展模块的 Python 第三方包,包括 scipy 和 numpy,只能在 Python 主解释器中工作,不能在子解释器中使用,因为默认情况下使用 mod_wsgi。结果可能是线程死锁、不正确的行为或进程崩溃。
将以下行添加到您的httpd.conf
. 在我的情况下,文件是/etc/apache2/apache2.conf
.
WSGIApplicationGroup %{GLOBAL}
Run Code Online (Sandbox Code Playgroud)
正如其他人所提到的,这是由于许多潜在原因导致进程崩溃造成的。原因之一是某些 Python 依赖项不是线程安全的。
如果这是问题所在,一种解决方法是切换 Apache 的 MPM 类型。prefork 类型不使用线程,所以如果问题是由于线程误用导致 numpy 崩溃,那么应该可以解决它。worker 和 event 类型使用较少的内存,但也使用线程,因此它们可能会遇到此错误。
要确定您当前使用的是哪种类型,请运行:
apachectl -V | grep -i mpm
Run Code Online (Sandbox Code Playgroud)
如果您看到,Server MPM: prefork
那么您已经在使用 prefork,这意味着错误的原因可能是其他原因。如果它显示“worker”或“event”,那么您可以通过运行以下命令切换到 prefork:
sudo a2dismod mpm_event
sudo a2dismod mpm_worker
sudo a2enmod mpm_prefork
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)
请注意,prefork 的主要缺点是,由于它不使用线程,因此会消耗更多内存。
编辑:由于其他原因,我遇到了这个错误。最近,该问题是由 Ubuntu 预编译的 mod-wsgi 系统包中的一个 bug 以及 Python psycopg2 包中的一个 bug 引起的。
解决方案是从系统 mod-wsgi 切换到 Python 包,以及切换到 psycopg2-binary 包:
sudo apt purge libapache2-mod-wsgi*
sudo apt install apache2-dev
pip uninstall psycopg2
pip install mod_wsgi psycopg2-binary
Run Code Online (Sandbox Code Playgroud)
我还必须通过添加到顶部来更新我的 apache 站点配置文件:
LoadModule wsgi_module /usr/local/myproject/.env/lib/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
Run Code Online (Sandbox Code Playgroud)
并将我的 WSGIDaemonProcess 语句更改为使用 python-home 而不是 python-path,类似于:
WSGIDaemonProcess myproject python-home=/usr/local/myproject/.env processes=5 threads=15 display-name=%{GROUP} user=www-data group=www-data
Run Code Online (Sandbox Code Playgroud)
我在 Python2.7 和 Python3.7 上都遇到过这个问题,解决方案是一样的,但是 mod_wsgi.so 的路径发生了变化。
归档时间: |
|
查看次数: |
18089 次 |
最近记录: |