如何使用 wsgi、django、php 和 apache2 追踪記憶體洩漏?
我正在為我的網站執行 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 與它無關。