系统配置: Apache2,Django 1.10,Python3,Ubuntu16.04LTS
Django debug=True
.
[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/
我不知道错误的原因。但我把范围缩小到Django wsgi过程。因为服务器正在正确地承载静态文件。
虽然Cloudflare有时显示502 :坏网关错误,但服务器本身显示500 :内部服务器错误。
我已经尝试重新启动服务器并检查Django的(调试)日志文件。Django日志文件中没有错误信息(完全没有)。
我应该如何调试这个问题?因为Django没有记录任何东西,所以我认为这个问题可能是在wsgi中引起的。
注意:服务器早些时候运行正常。我做了一些更改*(这些更改被恢复为-is);Django shell运行良好。
在其他类似的问题中,这个问题是在上传一个大文件的过程中引起的。
发布于 2017-04-16 20:10:37
造成这个问题的原因是粗野。
众所周知,Python扩展模块(如numpy )在mod_wsgi下使用时会导致超时。资料来源:肖恩·F on 从守护进程读取响应头时的超时的答复
“mod_wsgi
”的作者回答并解释了一个类似的问题,我在最初的搜索中没有找到这个问题。
使用C扩展模块的一些用于Python的第三方包(包括C和numpy )只能在Python解释器中工作,不能像默认情况下使用mod_wsgi那样在子解释器中使用。结果可能是线程死锁、不正确的行为或进程崩溃。资料来源:格雷厄姆·邓普顿 on mod_安装后的wsgi +无响应的的答复
将以下一行添加到您的httpd.conf
中。在我的例子中,文件是/etc/apache2/apache2.conf
。
WSGIApplicationGroup %{GLOBAL}
发布于 2018-10-13 16:55:00
正如其他人所提到的,这是由于一些潜在原因造成的进程崩溃造成的。原因之一是某些Python依赖关系不安全。
如果这是问题所在,一个解决办法就是切换Apache的MPM类型。预叉类型不使用线程,所以如果问题是线程误用导致的numpy崩溃,那么就应该修复它。工作者和事件类型使用较少的内存,但也使用线程,因此它们可能会遇到此错误。
若要确定当前使用的类型,请运行:
apachectl -V | grep -i mpm
如果您看到了Server MPM: prefork
,那么您已经在使用prefork,这意味着错误的原因可能是其他原因。如果它写的是"worker“或"event",那么您可以通过运行以下命令切换到预叉:
sudo a2dismod mpm_event
sudo a2dismod mpm_worker
sudo a2enmod mpm_prefork
sudo service apache2 restart
注意,Pre叉的主要缺点是,由于它不使用线程,它消耗了更多的内存。
编辑:由于其他原因,我从那时起就遇到了这个错误。最近,这个问题是由Ubuntu预编译的Most系统包中的一个bug以及Python包中的一个bug引起的。
解决方案是从切换到Python包,以及切换到内核2-二进制包:
sudo apt purge libapache2-mod-wsgi*
sudo apt install apache2-dev
pip uninstall psycopg2
pip install mod_wsgi psycopg2-binary
我还必须通过在顶部添加以下内容来更新apache站点配置文件:
LoadModule wsgi_module /usr/local/myproject/.env/lib/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
并将我的WSGIDaemonProcess语句改为使用python而不是python,如下所示:
WSGIDaemonProcess myproject python-home=/usr/local/myproject/.env processes=5 threads=15 display-name=%{GROUP} user=www-data group=www-data
我在Python2.7和Python3.7中都遇到过这种情况,解决方案是一样的,但是通向mod_wsgi.so的路径会发生变化。
发布于 2018-01-12 18:55:44
在使用mod_wsgi和apache运行opencv时,我也收到了类似的错误。我想问题可能是多个线程,底层C代码试图获取GIL,但是失败了。
我通过在threads=1指令中设置processes=32和processes=32(在我的例子中是合适的)来解决这个问题。
PS:迟到了,但认为这对某人有帮助。
https://serverfault.com/questions/844761
复制相似问题