Apache-2.2
如何自定義 MPM 以在 apache 上獲得最佳性能?
我對配置 apache 還是很陌生。有大量的教程,但很少有全面的如何做某事。
我想知道的是:
- 如何更改要使用我的 apache 的 MPM 配置文件?
- 我如何計算 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 安裝不同的預編譯二進製文件(如果它適用於您的作業系統)。然而,對於大多數用途來說,
prefork
MPM 就很好,特別是如果您要執行 PHP。PHP 不被認為是執行緒安全的,所以你不應該使用worker
, 並且event
是實驗性的……因此,
prefork
與您相關的唯一參數是該<IfModule mpm_prefork_module>
部分中的參數。最適合您的價值主要取決於您期望有多少並髮使用者,以及它如何變化。我會先將參數保持原樣,然後僅在您確實遇到性能問題時才開始性能調整。使用狀態頁面查看通常有多少客戶端連接到您的伺服器。如果您最終為超過 150 個並髮使用者提供服務,則會增加 MaxClients。