Apache-2.2

如何計算每個 prefork 執行緒需要多少 RAM 才能在 EC2 小型實例上實現最大 Wordpress 性能

  • February 17, 2015

只需閱讀使 WordPress 在 EC2-Micro 上穩定

在“Tuning Apache”部分,我不太明白他是如何得出他的 prefork 配置的數字的。

他解釋瞭如何獲得平均過程的數字,我得到了。但是之後:

或者每個程序大約 53MB…在這種情況下,十個執行緒應該是安全的。這意味著如果我們同時收到十個以上的請求,其他請求將排隊,直到有工作執行緒可用。為了最大限度地提高性能,我們還將配置系統以始終保持此數量的執行緒可用。

從每個程序 53MB 到 613MB 的 RAM,他以某種方式得到了這個配置,我沒有得到:

<IfModule prefork.c>
StartServers       10
MinSpareServers    10
MaxSpareServers   10
MaxClients       10
MaxRequestsPerChild  4000
</IfModule>

他究竟是如何從每個程序 53MB 和 613MB 限制中得到這個的?

獎金問題

從下面看,在一個小實例(1.7 GB 記憶體)上,好的設置是什麼?

bitnami@ip-10-203-39-166:~$ ps xav |grep httpd
1411 ?        Ss     0:00      2     0 114928 15436  0.8 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1415 ?        S      0:06     10     0 125860 55900  3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1426 ?        S      0:08     19     0 127000 62996  3.5 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1446 ?        S      0:05     48     0 131932 72792  4.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1513 ?        S      0:05      7     0 125672 54840  3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1516 ?        S      0:02      2     0 125228 48680  2.7 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1517 ?        S      0:06      2     0 127004 55796  3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1518 ?        S      0:03      1     0 127196 54208  3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1531 ?        R      0:04      0     0 127500 54236  3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf

計算背後的想法是您需要為其他事物保留一些記憶體 - 作業系統和在實例上執行的其他服務。之後,無論您剩下什麼,除以使用的平均記憶體(駐留集大小 - RSS 列)即可獲得伺服器可以處理的最大執行緒數而不會耗盡記憶體。

也就是說,我喜歡做我的計算略有不同,但我稍後會解決這個問題。

來自 httpd.conf:

前叉 MPM

  • StartServers:要啟動的伺服器程序數
  • MinSpareServers:保持空閒的最小伺服器程序數
  • MaxSpareServers:保持空閒的最大伺服器程序數
  • ServerLimit:伺服器生命週期內 MaxClients 的最大值
  • MaxClients:允許啟動的最大伺服器程序數
  • MaxRequestsPerChild:伺服器程序服務的最大請求數

您顯示的配置將保持恆定的 10 個程序執行:您啟動 10 個程序 (StartServers),並且您最多允許 10 個伺服器程序 (MaxClients)。在這種情況下,MinSpareServers 和 MaxSpareServers 不應該發揮作用。在伺服器程序處理了 4000 個請求後,它將被終止並在其位置創建一個新的(以嘗試限制記憶體洩漏等)

因此,假設您伺服器上的所有其他內容將使用大約 80MB 的記憶體 - 剩下 530MB。將其除以平均程序大小 (53MB) 得到 10 個程序。

我建議這個假設有點不對勁。如果你在伺服器上執行其他任何東西(例如 MySQL),你肯定需要保留更多的記憶體。此外,沒有考慮變化的空間。為了估計,我會為作業系統和其他服務留出至少 120MB 的空間,然後將剩餘的空間減少 10% 用於變化。因此,最多大約 8 個 apache 程序。

<IfModule prefork.c>
StartServers       2
MinSpareServers    1
MaxSpareServers   3
MaxClients       8
MaxRequestsPerChild  1000
</IfModule>

因此,以上 - 最多有 8 個程序。我們才剛剛開始 2。我們希望在任何給定時間至少有一個空閒 - 但不超過 3 個空閒。此外,由於記憶體是一個問題,因此 MaxRequestsPerChild 已減少。

現在,我更喜歡通過實際執行伺服器一段時間來計算數量,然後停止 apache 並查看系統其餘部分正在使用多少記憶體。從你的總數中減去這個數字,取 90%,然後除以你的平均 apache 程序大小。特別是對於更複雜的設置,這提供了更現實的價值。

值得一提的是,在記憶體受限的機器上,Nginx 作為網路伺服器可能比 Apache 更可取。此外,您肯定希望 t1.micro 上有一些交換空間(儘管您不應該發現自己經常使用它)。

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