Apache-2.2

我的 Apache 伺服器的瓶頸是什麼?

  • February 13, 2011
$netstat -anp | grep :80 | grep TIME_WAIT | wc -l  
840 
$netstat -anp |grep :80 | grep ESTABLISHED | wc -l 
50

記憶體使用:850MB / 1000MB

apache2.conf 包含..

<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>

是否有任何配置更改可以幫助我,或者只是我的 RAM 成為這裡的瓶頸?

需要緊急幫助..!!

如果沒有關於您的伺服器、配置和應用程序的更多資訊,很難給出詳細的答案,但這裡有一些需要考慮的一般事項:

  • 具有 1GB RAM 的 150 個 MaxClients 可能太多了,尤其是使用執行 PHP 的 Apache 伺服器。可能發生的情況是 Apache 將耗盡所有 RAM 並開始使用交換記憶體,這將立即扼殺您的性能。最好的檢查方法是在高峰時段檢查“top”和“free”的輸出,並確保交換記憶體使用量接近 0。如果您的可用記憶體變為零並且交換記憶體開始增加,請嘗試減少 MaxClients。棘手的部分是,在您碰巧遇到開始使用交換的流量高峰之前,伺服器似乎在 MaxClients 設置較高的情況下執行得很好。
  • 您可以通過禁用任何您不使用的模組來減少 Apache 使用的記憶體量。嘗試一次禁用幾個並進行測試,以確保您不會意外禁用所需的模組(根據經驗)。
  • 在 TIME_WAIT 中有很多連接是正常的。這是套接字完成並等待關閉/銷毀後發生的狀態。在 ESTABLISHED 中有很多連接可能只是由於伺服器負載高、服務文件需要一段時間或較大的 KeepAlive 設置(儘管我不確定後者保留了哪些狀態連接)。對於我的應用程序,我發現 KeepAlive 設置實際上會損害性能,所以我禁用了它。對於大多數應用程序來說,預設的 KeepAlive 設置(我認為是 15 秒)實際上相當大,值為 1 或 2 秒有時效果更好。
  • 下一個最有可能的瓶頸將是 CPU。使用“uptime”或“top”檢查伺服器的負載。一般來說,負載小於 1 是好的,大約 1 是好的,隨著值的增加,它表明一個更潛在的問題。沒有“壞”的負載值(至少在您獲得非常高的值之前):通常我看到負載小於 0.5,當它們執行良好時,我的伺服器上偶爾會出現高達 5 的峰值。檢查“top”中的 CPU 空閒率是衡量 CPU 繁忙程度的另一種方法。
  • 如果您的 CPU 是瓶頸,請考慮安裝 PHP 操作碼記憶體,例如 eAccelerator 或 APC。這可以立即將您的 CPU 使用率減少一半(左右)。其他需要考慮的事情是添加一個記憶體層以減少 Web 伺服器必須服務的請求數量,並使用像 lighttpd/nginx 這樣的輕量級伺服器來提供靜態內容。
  • 您可以使用 ab 或 siege 等基準程序更準確地測試您的瓶頸(硬體或配置)。使用目前配置進行一些基線測量,更改設置,然後重試。如果您不衡量更改配置的效果,您最終可能會花費大量時間更改錯誤的內容。

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