首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WSGI :从守护进程接收的截断或超大型响应标头

WSGI :从守护进程接收的截断或超大型响应标头
EN

Server Fault用户
提问于 2017-04-16 17:27:44
回答 5查看 25.7K关注 0票数 18

系统配置: Apache2,Django 1.10,Python3,Ubuntu16.04LTS

Django debug=True.

/var/log/apache2/error.log

代码语言:javascript
运行
复制
[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运行良好。

变更*

  1. 安装了django-熊猫,django-模型-使用,numpy,scikit-学习
  2. 一个应用于库之上的程序。(此更改将恢复为原件)

在其他类似的问题中,这个问题是在上传一个大文件的过程中引起的。

EN

回答 5

Server Fault用户

回答已采纳

发布于 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

代码语言:javascript
运行
复制
WSGIApplicationGroup %{GLOBAL}
票数 16
EN

Server Fault用户

发布于 2018-10-13 16:55:00

正如其他人所提到的,这是由于一些潜在原因造成的进程崩溃造成的。原因之一是某些Python依赖关系不安全。

如果这是问题所在,一个解决办法就是切换Apache的MPM类型。预叉类型不使用线程,所以如果问题是线程误用导致的numpy崩溃,那么就应该修复它。工作者和事件类型使用较少的内存,但也使用线程,因此它们可能会遇到此错误。

若要确定当前使用的类型,请运行:

代码语言:javascript
运行
复制
apachectl -V | grep -i mpm

如果您看到了Server MPM: prefork,那么您已经在使用prefork,这意味着错误的原因可能是其他原因。如果它写的是"worker“或"event",那么您可以通过运行以下命令切换到预叉:

代码语言:javascript
运行
复制
sudo a2dismod mpm_event
sudo a2dismod mpm_worker
sudo a2enmod mpm_prefork
sudo service apache2 restart

注意,Pre叉的主要缺点是,由于它不使用线程,它消耗了更多的内存。

编辑:由于其他原因,我从那时起就遇到了这个错误。最近,这个问题是由Ubuntu预编译的Most系统包中的一个bug以及Python包中的一个bug引起的。

解决方案是从切换到Python包,以及切换到内核2-二进制包:

代码语言:javascript
运行
复制
sudo apt purge libapache2-mod-wsgi*
sudo apt install apache2-dev
pip uninstall psycopg2
pip install mod_wsgi psycopg2-binary

我还必须通过在顶部添加以下内容来更新apache站点配置文件:

代码语言:javascript
运行
复制
LoadModule wsgi_module /usr/local/myproject/.env/lib/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so

并将我的WSGIDaemonProcess语句改为使用python而不是python,如下所示:

代码语言:javascript
运行
复制
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的路径会发生变化。

票数 7
EN

Server Fault用户

发布于 2018-01-12 18:55:44

在使用mod_wsgi和apache运行opencv时,我也收到了类似的错误。我想问题可能是多个线程,底层C代码试图获取GIL,但是失败了。

我通过在threads=1指令中设置processes=32和processes=32(在我的例子中是合适的)来解决这个问题。

PS:迟到了,但认为这对某人有帮助。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/844761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档