高負載下 Apache 記憶體與進程的最佳實踐
为情所困
为情所困 2017-05-16 17:03:02
0
1
785

檢查 Apache 是否運行在 prefork 的工作模式

apachectl -V | grep MPM
httpd -V | grep MPM

Server MPM:     Prefork
 -D APACHE_MPM_DIR="server/mpm/prefork"

查看目前每個行程所佔用的記憶體

top -bn 1 | grep httpd

 56961 apache    20   0  406m  49m  40m S  1.9  0.1   0:21.92 httpd
 56963 apache    20   0  406m  53m  44m S  1.9  0.1   0:20.45 httpd
 56967 apache    20   0  402m  52m  42m S  1.9  0.1   0:20.28 httpd
 56971 apache    20   0  404m  54m  44m S  1.9  0.1   0:21.18 httpd
 56974 apache    20   0  415m  55m  42m S  1.9  0.1   0:20.07 httpd

RES column 是 Apache process 使用的記憶體量,左起第六列。

計算進程數

最大進程數 = Apache 所能消耗的總記憶體 / 每個進程消耗記憶體量

設定相關參數

<IfModule prefork.c>
StartServers                30%MaxClients
MinSpareServers               5%
MaxSpareServers                 10%
ServerLimit                 256
MaxClients                  200 = 10G/50M
MaxRequestsPerChild 10000
</IfModule>

restart

  • apache 實際上會在這個框架內,再控制進程。例如負載不高時候,自動減少進程。
  • apache 規劃的關鍵在最大負載時候記憶體量,這一點和 nginx 不同
  • 透過最大記憶體量,計算出 MaxClients
  • 所有其他值均根據 MaxClients 計算出
为情所困
为情所困

全部回覆(1)
PHPzhong

這本是一篇文章。 。 。刪刪刪

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板