django的Apache + mod_wsgi httpd.conf设置是否影响mysql?

我有一个使用Apache和mod_wsgi的Django网站。 自从上一个4-5天以来,我一直在我的pipe理员电子邮件上收到这种types的错误。

OperationalError: (1040, 'Too many connections')

我已经安装了Django的debugging工具栏,我有平均每个页面100-150查询和小于300毫秒的响应时间。 我不认为我重载我的MySql服务器。 另一方面,在我尝试重新configuration我的httpd.conf设置后,发生了一段时间。

我的网站每天收到800-1000次点击。

这些是我的httpd.conf设置

 KeepAlive Off Listen 13646 MaxSpareThreads 15 MinSpareThreads 8 MaxClients 20 ServerLimit 20 SetEnvIf X-Forwarded-SSL on HTTPS=1 ThreadsPerChild 5 MaxRequestsPerChild 1000000 StartServers 20 WSGIDaemonProcess <project> processes=7 threads=12 python-path=<path> WSGIProcessGroup <project> WSGIRestrictEmbedded off WSGILazyInitialization On 

任何帮助将非常感激。

PS。 我正在共享主机计划。 我的主机scheme有512MB RAM,300MB是免费的。

关于你的configuration的一些评论。

  1. MaxSpareThreads和MinSpareThreads应该是ThreadsPerChild的倍数。 如果不是这样,在一些值的组合下,你可以让Apache在创build新进程之间循环,因为它认为它需要它们,然后决定下一次再杀它们,因为它会改变它的思想,并把它们看作是多余的。 所以,将MinSpareThreads更改为5。

  2. MaxClients表示,在所有Apachesubprocess中最多可以有20个并发请求。 然而,他们代理的mod_wsgi守护进程有能力处理7 * 12 = 84。 因此,你已经在守护进程/线程上分配了,因为Apache的子工作进程永远不能同时通过20个以上的请求。 一个更好的configuration,使用更less的内存是进程= 4和线程= 5。

  3. 如果您实际使用工人MPM,则StartServers设置为20即可。 技术上,StartServers不能超过MaxClients / ThreadsPerChild for worker MPM。 因此,将StartServers设置为2。

  4. MaxRequestsPerChild被设置为任意高,并且与您的请求吞吐率一样,您也可以将其设置为0的正常默认值,这意味着要保留这些进程而不是在最大数量的请求中回收它们。 由于Python Web应用程序以mod_wsgi守护进程模式运行,因此无论如何都不需要回收Apachesubprocess进程。

无论如何,这不太可能改变你原来的问题,但会创build一个更优化的configuration。