使用mod_wsgi冻结Django / Apache
我有一个Django应用程序,它在Nginx之后的2个负载均衡的mod_wsgi / Apache服务器(静态文件,反向代理/负载均衡)之后运行. 每隔几天,我的网站就会变得完全没有响应.我的猜测是,一堆客户端正在请求被阻止的URL. 这是我的配置
我尝试过仅使用一个线程和更多进程,以及更多线程和一个进程进行实验.我迟早尝试的所有操作几乎都会导致页面加载超时. 有什么建议可以尝试吗?如果这可以解决问题,我愿意尝试其他部署选项. 另外,除了Apache状态模块之外,还有更好的方法来监视mod_wsgi吗?我一直在打:
并观察忙碌的工人的数量作为我是否会遇到麻烦的指标(我假设我有更多的忙碌的工人,当前正在进行的阻塞操作更多). 注意:其中一些请求是针对我为该应用程序托管的REST Web服务的.以某种方式通过Nginx对URL位置进行速率限制是否有意义? 最佳答案 采用:http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Extracting_Python_Stack_Traces 嵌入可以在遇到卡住的请求并找出它们在做什么时触发的功能.这些请求可能随着时间的推移不断累积,而不是立即发生,因此您可以定期执行此请求,而不必等待完全失败. 作为故障保险,您可以添加以下选项:
到WSGIDaemonProcess指令. 如果10分钟处于非活动状态,它将重新启动守护程序模式进程. 不幸的是,目前这发生在两种情况下. 第一个是10分钟没有任何请求的地方,该过程将重新启动. 第二个也是您要加入的一个,如果所有请求线程都被阻塞,并且它们都没有从wsgi.input读取任何输入,也没有产生任何响应内容,那么在10分钟内,该过程将再次重新启动自动. 这至少意味着您的过程应自动恢复,并且不会被召唤出床.由于您正在运行许多进程,因此它们可能不会同时卡住,因此新请求不应引起重新启动的注意,因为其他进程仍会处理这些请求. 您应该解决的问题是可以将超时时间降低到多低.您不希望它太低,以至于由于根本没有请求,进程将重新启动,因为它会卸载应用程序,如果使用的是延迟加载,则会导致下一个请求变慢. 我应该做的实际上是添加一个新的选项blockd-timeout,该选项专门检查在定义的时间段内所有被阻止的请求,因此由于根本没有任何请求,因此将其与重新启动分开.这将使其更加灵活,因为由于没有请求而重新启动它会带来再次加载应用程序的问题. 不幸的是,由于托管配置可能是多线程的,因此无法轻松实现适用于单个请求的请求超时.向请求中注入Python异常不一定会解除线程阻塞,最终您还是必须终止进程并中断其他并发请求.因此,阻塞超时可能更好. 对我来说,另一件有趣的事情可能是,我将一些东西添加到mod_wsgi中,以报告由于进程阻塞而导致的强制重新启动到New Relic代理中.那样真的很酷,因为您将在监视工具中看到它们. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- django-实时启动夹层网站
- apache-2.2 – Jetty应该总是落后于另一个网络服务器(例如n
- Newrelic插件Nginx-nr-agent无法正常工作
- nginx – $request_uri后缀的变量,与位置块前缀不匹配
- linux – 如何处理Varnish堆栈中的Cookie
- utf-8-使用pcre 8.3在nginx上的unicode url重写规则失败
- ruby-on-rails – 生成服务器上找不到rbenv:bundle:命令
- ruby – 关于Nginx配置的Sinatra – 出了什么问题?
- Cookies-fastcgi缓存登录用户的方法缓存,并为每个用户自定义
- nginx中的动态proxy_pass到Kubernetes中的另一个pod