我在网站上有一个使用apache + mod_wsgi的django站点。
网站大约每分钟收到1000个请求。
但是它做了一些计算,所以请求大约需要5-10秒。
我使用以下配置
StartServers 2
MinSpareThreads 10
MaxSpareThreads 25
ThreadLimit 25
ThreadsPerChild 25
MaxClients 75
MaxRequestsPerChild 1000threads=15 processes=12
问题是CPU使用率很高,处理一个简单的静态页面需要时间而不需要计算(看起来像Apache排队请求)。
因此,我希望Apache能够快速地接受请求。
我完全迷失了,因为参数的数量,我也不太明白他们的意思。我们需要StartServers和MaxRequestWorkers做什么?
如有任何帮助和/或解释,将不胜感激。
我有8GB内存。
阿帕奇MPM工人
mod_wsgi 4.4.21.
提前谢谢你。
发布于 2018-02-07 16:05:06
StartServers是您开始使用的服务器进程的数量,MaxRequestWorkers是每个进程的线程数。在大多数情况下,Web派系设置应该是合理的,尽管每分钟可能需要调整1000个请求,但可能主要是在应用程序中。
在正常使用中,httpd会接受一个请求,将它传递给mod_wsgi,然后等待它的返回,这应该是近乎瞬时的,所以实际上占用它时间的是python正在做的任何事情。因此,您的httpd工作线程处于等待状态,在处理其他请求时,当请求传入时,将生成这些线程,因此,如果线程被占用,即使是静态页面也会等待。
看看应用程序正在做什么,并寻找解决方案。您可以使用memcached或类似的方式缓存查询。如果您的应用程序处理请求所需的时间是不可避免的,请考虑使用像芹菜这样的消息队列使其异步,所以您可以使用浏览器端脚本来轮询web服务器,而不是让web服务器等待响应。
将静态页面从动态中分离也将改善响应。如果可能的话,您可以运行多组工作人员,或者将静态页面和对象传递给nginx,这是一种更常见的处理wsgi的方法。
另一种方法是通过本地web服务器(如tornado或gunicorn )为python提供服务,并使用apache作为反向代理,这可能会改善后端响应,但如果进程导致大量等待线程,这仍然没有帮助。
https://serverfault.com/questions/895981
复制相似问题