我有一个Django应用程序运行在@R_404_5171@之后的2个负载均衡的mod_wsgi / Apache服务器(静态文件,反向代理/负载均衡)之后。
隔几天,我的网站变得完全没有反应。 我的猜测是,一群客户端正在请求阻止的URL。
这是我的configuration
WsgiDaemonProcess web1 user=web1 group=web1 processes=8 threads=15 maximum-requests=500 python-path=/home/web1/django_env/lib/python2.6/site-packages display-name=%{GROUP} WsgiProcessGroup web1 WsgiScriptAlias / /home/web1/django/wsgi/wsgi_handler.py
我试过只使用一个线程和更多的进程,更多的线程和一个进程。 几乎所有我尝试迟早会导致页面加载超时。
如何检测PHP中的浏览器预取?
Apache:我如何将foo.htmlredirect到foo并将foo重写为foo.html?
任何build议,我可能会尝试? 如果能解决问题,我愿意尝试其他部署选项。
另外,有没有更好的方法来监视Apache状态模块以外的mod_wsgi? 我一直在打:
curl http://localhost:8080/server-status?auto
并且观察一下忙碌的工人数量,作为我是否会陷入困境的一个指标(我假设我有更多的忙碌工作者,现在正在进行更多的封锁工作)。
注意:这些请求中的一部分是我为应用程序托pipe的REST Web服务。 以某种方式通过@R_404_5171@来限制URL位置是否有意义?
mod_rewrite,.htaccess连接到MysqL数据库
为ARM编译ActiveMQ
Apache mod_wsgi错误:禁止您没有权限访问/在此服务器上
在EC2上的负载均衡器后面找不到HTTP_HOST
麻烦utf-8字符&apache2重写规则
使用:
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Extracting_Python_Stack_Traces
嵌入功能,你可以触发的时候,你期望卡住的要求,并找出他们在做什么。 这些请求可能会随着时间而积累起来,而不是一次发生,所以你可以定期做,而不是等待彻底的失败。
作为失败保险箱,您可以添加选项:
inactivity-timeout=600
到WsgiDaemonProcess指令。
如果守护进程模式处于非活动状态10分钟,将会执行什么操作。
不幸的是目前这种情况发生在两种情况下。
首先是10分钟内没有任何请求的地方,这个过程将会重新开始。
第二个,你想踢的是,如果所有的请求线程被阻塞,没有人从wsgi.input读取任何输入,也没有任何响应内容,在10分钟内,过程将再次被重新启动自动。
这至少意味着你的过程应该自动恢复,你不会被叫下床。 因为你正在运行这么多的进程,很可能它们不会同时被卡住,所以重新启动不应该被新的请求注意到,因为其他进程仍然会处理请求。
你应该制定的是,你可以超时。 你不希望它太低,以至于进程会因为没有请求而重新启动,因为如果使用延迟加载会导致速度变慢,它将卸载应用程序和下一个请求。
我应该做的是实际上添加一个新的选项阻塞超时,专门检查所有被限制的时间段内被阻止的请求,因此根本没有请求将其从重新启动分离。 这会使得它更加灵活,因为没有请求会再次加载应用程序带来自己的问题。
不幸的是,不能轻易地实现一个适用于单个请求的请求超时,因为主机配置可能是多线程的。 将Python异常注入到请求中不一定会解除对该线程的阻塞,并且最终您将不得不终止进程并中断其他并发请求。 因此,阻塞超时可能会更好。
另一个有趣的事情可能是我添加到mod_wsgi中的东西,以报告由于进程被阻塞到New Relic代理程序而导致的强制重启。 那样会非常酷,因为你可以在监视工具中看到它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。