Apache-2.2

如何自定義 MPM 以在 apache 上獲得最佳性能?

  • April 9, 2013

我對配置 apache 還是很陌生。有大量的教程,但很少有全面的如何做某事。

我想知道的是:

  1. 如何更改要使用我的 apache 的 MPM 配置文件?
  2. 我如何計算 apache2.conf 中的最佳客戶端和連接數是多少,該伺服器主要用於多個 CMS 系統,如 wordpress 等。包括記憶體?

我使用的伺服器是:XEON E3-1230 (4 x 3,2 GHz) 和 16 GB DDR3 EEC。我希望進一步的描述是無關緊要的。

這就是我在 /etc/apache2/apache2.conf 中的內容

# prefork MPM
<IfModule mpm_prefork_module>
   StartServers          5
   MinSpareServers       5
   MaxSpareServers      10
   MaxClients          150
   MaxRequestsPerChild   0
</IfModule>

# worker MPM
<IfModule mpm_worker_module>
   StartServers          2
   MinSpareThreads      25
   MaxSpareThreads      75 
   ThreadLimit          64
   ThreadsPerChild      25
   MaxClients          150
   MaxRequestsPerChild   0
</IfModule>

# event MPM
<IfModule mpm_event_module>
   StartServers          2
   MaxClients          150
   MinSpareThreads      25
   MaxSpareThreads      75 
   ThreadLimit          64
   ThreadsPerChild      25
   MaxRequestsPerChild   0
</IfModule>

阿帕奇模組:

# apache2ctl -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 prefork.c
 http_core.c
 mod_so.c

其他:

Server version: Apache/2.2.16 (Debian)


# apache2ctl -V
Server version: Apache/2.2.16 (Debian)
Server built:   Mar  3 2013 12:09:44
Server's Module Magic Number: 20051115:24
Server loaded:  APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
 threaded:     no
   forked:     yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"

MPM 在編譯時配置到您的 apache 伺服器中。因此,要使用不同的 MPM,您必須重新編譯 apache,或者使用所需的 MPM 安裝不同的預編譯二進製文件(如果它適用於您的作業系統)。然而,對於大多數用途來說,preforkMPM 就很好,特別是如果您要執行 PHP。PHP 不被認為是執行緒安全的,所以你不應該使用worker, 並且event是實驗性的……

因此,prefork與您相關的唯一參數是該<IfModule mpm_prefork_module>部分中的參數。最適合您的價值主要取決於您期望有多少並髮使用者,以及它如何變化。我會先將參數保持原樣,然後僅在您確實遇到性能問題時才開始性能調整。使用狀態頁面查看通常有多少客戶端連接到您的伺服器。如果您最終為超過 150 個並髮使用者提供服務,則會增加 MaxClients。

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