首先,我想說我使用Drupal作爲CMS,並且我知道有單獨的Drupal stackexchange站點。但我的問題不是Drupal特定的,它不在用戶或高級用戶級別。它與PHP和服務器相關。好吧,現在問題。PHP應用程序性能
我開發了尚未推出的網站。隨機存取內存錯誤。有時服務器會崩潰。有助於重新啓動。沒有其他人使用應用程序,所以沒有重負載。特別是超過了特權限制。我嘗試了一些一般的東西 - 增加/減少PHP內存限制,尋找錯誤日誌,記錄緩慢的MySQL查詢。沒有...一樣。
我已經運行'top'linux命令。根據瀏覽器請求,有4-5個apache進程。 MEM使用率(%)是10,5,4,3,0.5。兩個過程運行> 10小時。 重新啓動apache後,我獲得了+ 40%的可用內存。
這裏有一些問題和mysts對我來說。
- 爲什麼這兩個進程在沒有來自瀏覽器的活動請求的情況下運行那麼久?我怎樣才能防止他們?
- 爲什麼我在重新啓動後有+ 40%的空閒內存,當我有10 + 5 + 4 + 3 + 0.5內存使用的Apache?這不應該是平等的?
- 這可能是內存泄漏嗎?我如何檢測它們?
- 我應該用什麼技術從較高層次降低到低層次?想象一下,在我的一個函數中我有'內存泄漏',我應該如何讓他在整個應用程序中?
- 如何基準我的特殊功能的內存和CPU使用率?
- 爲什麼服務器崩潰?即使基本的httpd重啓正在返回「fork:無法分配內存」。這可能是內存泄漏的症狀嗎?
請逐點回答。
您是否使用過任何注重性能的模塊(例如[from this list])(http://drupal.org/project/modules?filters=tid%3A123%20drupal_core%3A103%20bs_project_sandbox%3A0&solrsort=sis_project_release_usage%20desc ))?當你使用一些分析器時你看到了什麼?你是否執行一些不尋常的任務,例如。用你自己的模塊(比如用每個請求重建菜單)?你使用緩存嗎? – Tadeck 2012-01-11 08:44:37
未使用性能模塊。這不應該是發展中的問題,是的?一定要在生產中使用。我有一些自定義代碼影響每一個請求,但我幾乎可以肯定沒有什麼重要的東西。 – 2012-01-11 08:55:46
您可以使用一些性能分析模塊,這些模塊將列出執行的功能和/或數據庫查詢以及執行所需的內存使用情況和時間。它可以縮小問題的範圍。當涉及到這個自定義代碼時,你可能是錯的,這完全取決於。例如。如果做得不正確,修改菜單可能會造成一些主要的性能下降。 – Tadeck 2012-01-11 09:08:35