如何定制 MPM 以在 Apache 上获得最佳性能?

如何定制 MPM 以在 Apache 上获得最佳性能?

我对配置 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>

Apache 模块:

# 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"

答案1

MPM 在编译时配置到您的 Apache 服务器中。因此,要使用不同的 MPM,您必须重新编译 Apache,或安装具有所需 MPM 的不同预编译二进制文件(如果您的操作系统可用)。但是对于大多数用途来说,MPMprefork就足够了,特别是如果您要运行 PHP。PHP 不被认为是线程安全的,所以您不应该使用worker,并且event是实验性的...

因此,请继续使用prefork,唯一与您相关的参数是本<IfModule mpm_prefork_module>节中的参数。最适合您的值主要取决于您预期的并发用户数以及该值的变化情况。我建议从保留参数的原样开始,并且只有在您真正遇到性能问题时才开始性能调整。使用状态页面查看通常有多少客户端连接到您的服务器。如果您最终为超过 150 个并发用户提供服务,请增加 MaxClients。

相关内容