Apache-2.2

WordPress 阻塞了 Apache

  • May 19, 2012

好吧,我討厭成為無助的 Apache 菜鳥,但我在這裡感到很難過。

昨晚突然間,我們的 WordPress 網站宕機了。我重新啟動它並觀察了幾分鐘,它似乎沒問題,所以我就不管它了。然後我醒來發現它又掉了。經過一番調查,我發現,儘管當時每分鐘只收到 20 個左右的請求,Apache 仍然為幾乎每個請求創建一個新實例,直到它到達 MaxClients,然後這些實例就坐在那裡什麼也不做。那時整個系統的 CPU 使用率實際上是 0.1%。如果我登錄 MySQL 並查看程序列表,我可以看到每個 httpd 對應的數據庫連接,所以看起來腳本永無止境。但是,如果我在到達 MaxClients 之前請求一個靜態文件,甚至是一個簡單的“Hello world”PHP 文件,那麼該請求將順利通過。

我什至不知道該看什麼,因為這裡沒有其他人具備將 SSH 連接到盒子甚至安裝外掛的技術複雜性,而且我知道我至少有幾天沒有碰過它 - 所以我沒有甚至不知道是什麼改變導致了問題。

設置是 Apache 2.2.3/prefork 和 mod_php 5.2.6。以下是明顯相關的設置(如果您知道其他任何內容,請告訴我):

httpd.conf

Timeout 20
KeepAlive Off
<IfModule prefork.c>
   StartServers 2
   MinSpareServers 1
   MaxSpareServers 3
   MaxClients 50
   MaxRequestsPerChild  2000
</IfModule>

php.ini

max_execution_time = 600 ; Set so high for large file uploads
max_input_time = 600 ; Set so high for large file uploads
memory_limit = 128M ; Set so high for large file uploads

log_errors = On

我嘗試過的幾件事:

  • 增加 MaxClients

    • 這只是導致 Apache 吃光了所有 1.6 GB 的 RAM,然後做和以前一樣的事情
  • 將 max_execution_time 和 max_input_time 減少到 15,將 memory_limit 減少到 32M

    • 沒有區別——httpd 實例仍然是不朽的
  • 重新安裝 WordPress

    • 完全沒有區別
  • tail -f錯誤日誌

    • 除了到達 MaxClients 外,沒有報告任何錯誤
  • tail -fing access_log 看看我們是否被 DDOSed 或其他什麼

    • 發生這種情況時流量確實很低

我覺得我必須在我面前錯過一些東西,但對於我的生活,我無法弄清楚這裡出了什麼問題。所以我希望在系統管理方面更有經驗的人已經看到了我之前做錯的任何事情。

您在 Apache 中的 php 腳本突然變得非常緩慢。你需要找出你的瓶頸是什麼。由於您沒有高 CPU 使用率——它可能是交換、磁碟或網路 IO 緩慢、數據庫伺服器緩慢、dns 請求緩慢——以及許多其他原因。

首先檢查所有日誌是否有可疑錯誤。如果您仍然不知道 - 您可以嘗試 strace apache 程序以查看哪個呼叫較慢作為調試的開始。

好的對不起keepalives問題..“顯示程序列表”在mysql伺服器上說什麼?通常,鎖定/損壞的表會解釋該問題。

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