Apache-2.2

如何使用 wsgi、django、php 和 apache2 追踪記憶體洩漏?

  • July 14, 2011

我正在為我的網站執行 3 個單獨的虛擬主機(主站點使用 Django w/wsgi,另一個使用 wsgi 的 Django 用於站點的移動版本,第三個用於 Wordpress 作為站點的部落格)。幾週後,交換記憶體上升到我的載入和 ping 時間變得非常慢的程度。當我查看 時top,我看到有幾個 Apache 程序,每個程序都佔用了大量記憶體,並且已經執行了至少一個小時。

這是在 Rackspace 雲(中型實例)上執行的 Ubuntu 10.04 伺服器上。

我在守護程序模式下使用 wsgi 執行兩個 django 站點(執行緒 = 1,程序 = 2)。

我的 apache2.conf 主要設置看起來像這樣(去掉了幾個“不相關”的東西以最小化這篇文章的大小——如果你期待另一個設置,請告訴我,我可以檢查我是否有它) :

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>

我看到的一件事是從 Apache 切換到“不那麼臃腫”的 Web 伺服器。我對這個想法持開放態度,但我猜我最好將 Wordpress 從伺服器上移走,這樣我就不需要 PHP(或者這些其他 Web 伺服器是否一起提供 php 和 python 解決方案?)

如果您想了解更多資訊,請告訴我。謝謝!

使用 mod_wsgi 文件中記錄的 display-name 選項來標記 mod_wsgi 守護程序。這樣,如果大型程序實際上是 mod_wsgi 守護程序,您可以使用“ps”查看。

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

如果它們很胖,那麼 Apache 或 mod_wsgi 與它無關。這將是因為您的應用程序本身很胖。這可能是因為記憶體中的數據記憶體過多或資源洩漏。

如果標記的 mod_wsgi 守護程序模式程序不是胖的,那麼您可能沒有委託 Python 應用程序在守護程序中正確執行。那或您的 PHP 應用程序是問題所在。

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

簡而言之,當你的應用程序很胖時,不管你使用什麼託管機制,它們仍然很胖,除非你填滿了 Apache 配置,否則 Apache 和 mod_wsgi 與它無關。

引用自:https://serverfault.com/questions/289894