如何計算每個 prefork 執行緒需要多少 RAM 才能在 EC2 小型實例上實現最大 Wordpress 性能
只需閱讀使 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 上有一些交換空間(儘管您不應該發現自己經常使用它)。