apache2 伺服器中的零空閒工作人員導致性能問題
我有一個基於 php 以及 apache2 和 mysql 的 SAAS 產品,它已經託管在 AWS 上。我的生產在高峰時間非常慢,當我檢查伺服器狀態時,它說空閒工作人員為 0(零)我正在使用 mpm-prefork
Current Time: Monday, 24-Aug-2020 19:36:32 UTC Restart Time: Friday, 14-Aug-2020 06:03:27 UTC Parent Server Config. Generation: 12 Parent Server MPM Generation: 11 Server uptime: 10 days 13 hours 33 minutes 5 seconds Server load: 1.17 1.07 0.95 Total accesses: 28851443 - Total Traffic: 824.8 GB CPU Usage: u289.99 s50.68 cu0 cs0 - .0373% CPU load 31.6 requests/sec - 0.9 MB/second - 30.0 kB/request 256 requests currently being processed, 0 idle workers
以下是我的 mpm-prefork.conf 設置文件
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 450 MaxConnectionsPerChild 0 </IfModule>
ubuntu20.04 上的 TOP 命令給了我這個:
top - 20:03:58 up 143 days, 11:16, 1 user, load average: 0.48, 0.71, 0.83 Tasks: 369 total, 3 running, 317 sleeping, 0 stopped, 0 zombie %Cpu(s): 15.9 us, 3.2 sy, 0.0 ni, 79.9 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st KiB Mem : 7865072 total, 1023492 free, 2752320 used, 4089260 buff/cache KiB Swap: 0 total, 0 free, 0 used. 4755856 avail Mem
根據詳細資訊,我可以看到 1 GB 記憶體仍然是免費的。那麼零閒置工人呢?另外,為什麼當我將 MaxRequestWorkers 設置為 450 時,只有 256 個請求的空閒工作人員為零。機器中的最大 RAM 為 8GB
使用 MPM prefork,如果你增加
MaxRequestWorkers
你也需要增加ServerLimit
.對於非執行緒伺服器(即 prefork),MaxRequestWorkers 轉換為將啟動以服務請求的最大子程序數。預設值為 256;要增加它,您還必須提高 ServerLimit。
https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers
使用 mpm_prefork,網路伺服器會產生新的程序來處理請求。每個程序一次只能處理一個請求。
在您的範例中,您的網路伺服器設置為至少有 5 個空閒伺服器程序等待處理請求,最多 10 個。鑑於您正在處理超過 250 個同時請求,可能是您的網路伺服器無法快速生成新程序足夠。
我會增加 StartServers、MinSpareServers 和 MaxSpareServers 值,以確保您有足夠的可用容量來應對負載高峰或重負載。
您可能還需要考慮根據需要服務的工作負載類型更改為另一個多處理模組。
編輯:@tetech 的答案是正確的,但是您可能還希望考慮調整這些值,因為這可以提高網路伺服器的性能。