2012-04-15 66 views
0

我正在編寫和構建Apache的Linux框中工作。我無法告訴我使用的是哪個Apache MPM(prefork或worker),因爲在/ usr/sbin /中似乎都有可執行文件。這是一個CentOS框:Apache MPM混淆 - 需要澄清

httpd 
httpd.worker 

在腳本/ usr/sbin目錄/的apachectl是下面的行:

# the path to your httpd binary, including options if necessary 
HTTPD='/usr/sbin/httpd' 

然而,/ usr/sbin目錄/的apachectl還示出HTTPD配置在以下文件中這使我相信它的覆蓋上述選項httpd和在httpd.worker指着它:

$ cat /etc/sysconfig/httpd 
# Configuration file for the httpd service. 

# 
# The default processing model (MPM) is the process-based 
# 'prefork' model. A thread-based model, 'worker', is also 
# available, but does not work with some modules (such as PHP). 
# The service must be stopped before changing this variable. 
# 
HTTPD=/usr/sbin/httpd.worker 

# 
# To pass additional options (for instance, -D definitions) to the 
# httpd binary at startup, set OPTIONS here. 
# 
#OPTIONS= 

# 
# By default, the httpd process is started in the C locale; to 
# change the locale in which the server runs, the HTTPD_LANG 
# variable can be set. 
# 
#HTTPD_LANG=C 

# 
# By default, the httpd process will create the file 
# /var/run/httpd/httpd.pid in which it records its process 
# identification number when it starts. If an alternate location is 
# specified in httpd.conf (via the PidFile directive), the new 
# location needs to be reported in the PIDFILE. 
# 
#PIDFILE=/var/run/httpd/httpd.pid 

我的結論是,我使用MPM工人。然而,爲什麼我會在/ usr/sbin中有一個httpd可執行文件,它似乎被編譯爲MPM prefork?看看這些命令?文物也許?:

# httpd -l 
compiled in modules: 
core.c 
prefork.c 
http_core.c 
mod_so.c 

$ httpd -V 
Server version: Apache/2.2.15 (Unix) 
Server built: Feb 13 2012 22:31:42 
Server's Module Magic Number: 20051115:24 
Server loaded: APR 1.3.9, APR-Util 1.3.9 
Compiled using: APR 1.3.9, 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/httpd" 
-D SUEXEC_BIN="/usr/sbin/suexec" 
-D DEFAULT_PIDLOG="run/httpd.pid" 
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status" 
-D DEFAULT_LOCKFILE="logs/accept.lock" 
-D DEFAULT_ERRORLOG="logs/error_log" 
-D AP_TYPES_CONFIG_FILE="conf/mime.types" 
-D SERVER_CONFIG_FILE="conf/httpd.conf" 

$ httpd.worker -l 
Compiled in modules: 
core.c 
worker.c 
http_core.c 
mod_so.c 

$ apachectl -l 
Compiled in modules: 
core.c 
worker.c 
http_core.c 
mod_so.c 
# apachectl -V 
Server version: Apache/2.2.15 (Unix) 
Server built: Feb 13 2012 22:33:00 
Server's Module Magic Number: 20051115:24 
Server loaded: APR 1.3.9, APR-Util 1.3.9 
Compiled using: APR 1.3.9, APR-Util 1.3.9 
Architecture: 64-bit 
Server MPM:  Worker 
    threaded:  yes (fixed thread count) 
    forked:  yes (variable process count) 
Server compiled with.... 
-D APACHE_MPM_DIR="server/mpm/worker" 
-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/httpd" 
-D SUEXEC_BIN="/usr/sbin/suexec" 
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status" 
-D DEFAULT_ERRORLOG="logs/error_log" 
-D AP_TYPES_CONFIG_FILE="conf/mime.types" 
-D SERVER_CONFIG_FILE="conf/httpd.conf" 

的最後一個原因,我相信我跑httpd.worker:

ps -C httpd.worker -F 
UID  PID PPID C SZ RSS PSR STIME TTY   TIME CMD 
root  13603  1 0 34690 4852 1 01:58 ?  00:00:00 /usr/sbin/httpd.worker 
apache 13605 13603 0 34619 2352 1 01:58 ?  00:00:00 /usr/sbin/httpd.worker 
apache 13606 13603 0 123554 7444 1 01:58 ?  00:00:00 /usr/sbin/httpd.worker 
apache 13607 13603 0 240987 52604 0 01:58 ?  00:00:00 /usr/sbin/httpd.worker 
apache 13609 13603 0 273755 52396 0 01:58 ?  00:00:00 /usr/sbin/httpd.worker 
apache 13611 13603 0 290139 52128 0 01:58 ?  00:00:00 /usr/sbin/httpd.worker 

回答

3

如果你是在CentOS,打開/ usr/sbin目錄/的apachectl和下文你行提到

# the path to your httpd binary, including options if necessary 
HTTPD='/usr/sbin/httpd' 

,你會發現下面幾行:

# Source /etc/sysconfig/httpd for $HTTPD setting, etc. 
if [ -r /etc/sysconfig/httpd ]; then 
    . /etc/sysconfig/httpd 
fi 

這就是你的apachectl如何抓取並覆蓋apachectl自己的HTTPD變量。

這也意味着你確實使用worker mpm而不是prefork。