apache2 伺服器中的零空閒工作人員導致效能問題

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 個請求上的空閒工作執行緒為零。

答案1

對於 MPM 預叉,如果增加,MaxRequestWorkers您還需要提高ServerLimit

對於非執行緒伺服器(即 prefork),MaxRequestWorkers 轉換為將啟動以服務請求的子程序的最大數量。預設值為256;要增加它,您還必須提高 ServerLimit。

https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers

答案2

使用 mpm_prefork,網頁伺服器會產生新進程來處理請求。每個進程一次只能處理一個請求。

在您的範例中,您的 Web 伺服器設定為至少有 5 個空閒伺服器進程等待處理請求,最多 10 個。

我會增加 StartServers、MinSpareServers 和 MaxSpareServers 值,以確保您有足夠的可用容量來應對負載峰值或重負載。

您可能還需要考慮更改為另一個多處理模組,具體取決於您需要服務的工作負載類型。

編輯:@tetech 的答案是正確的,但是您可能還想考慮調整這些值,因為這可以提高網頁伺服器的效能。

相關內容