0

私はApacheをコンパイルおよびビルドしなかったLinuxボックスに取り組んでいます。/ usr / sbin /に両方の実行可能ファイルがあるように見えるため、使用しているApache MPM(プリフォークまたはワーカー)がわかりません。これはCentOSボックスです:

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ワーカーを使用しているということです。ただし、MPMプリフォークとしてコンパイルされているように見えるhttpd実行可能ファイルが/ usr / sbinにあるのはなぜですか?これらのコマンドを見てください。アーティファクトかもしれませんか?:

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

1 に答える 1

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 変数を取得してオーバーライドする方法です。

これは、実際に prefork の代わりに worker mpm を使用していることも意味します。

于 2012-05-02T20:30:31.043 に答える