我如何跟踪内存泄漏与wsgi,Django的,PHP和Apache2?

我为我的网站运行3个独立的虚拟主机(Django w / wsgi主站点,另一个Django w / wsgi站点的移动版本,以及第三个Wordpress站点的博客)。 几个星期后,交换内存上升到我的负载和ping时间变得非常慢的时候。 当我看到top ,我看到有几个Apache进程占用大量的内存,并且已经运行了至less一个小时。

这是在Rackspace云(中型实例)上运行的Ubuntu 10.04服务器上。

我正在使用守护进程模式下的wsgi运行这两个django站点(threads = 1,processes = 2)。

我的apache2.conf主要设置看起来像这样(为了减less这篇文章的大小,删除了几个“无关”的东西 – 如果你期待另一个设置,让我知道,我可以检查是否在那里) :

 Timeout 120 KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 

有一件我见过的build议是从Apache切换到一个“不那么臃肿”的Web服务器。 我对这个想法持开放态度,但是我猜测我最好把Wordpress从服务器上移开,这样我就不需要PHP(或者其他的Web服务器提供php和python解决scheme吗?)

让我知道你是否想要更多的信息。 谢谢!

使用mod_wsgi文档中logging的display-name选项来标记mod_wsgi守护进程。 这样,你可以用'ps'看到大进程实际上是mod_wsgi守护进程。

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

如果它们很胖,那么Apache或者mod_wsgi与它无关。 这将是因为你的应用程序本身很胖。 这可能是因为内存中的数据过度caching或资源泄漏。

如果标记的mod_wsgi守护进程模式进程不胖,那么您可能还没有委托Python应用程序正常运行在守护进程中。 这或你的PHP应用程序是问题。

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode

简而言之,当你的应用程序很胖的时候,你使用的托pipe机制并不重要,它们仍然很胖,Apache和mod_wsgi与它们没有任何关系,除非你填充了Apacheconfiguration。