Apacheを学ぶ - プロセスの変更

Apacheのプロセスが、以下の3つのモードで動くのはわかった。

  • prefork
  • worker
  • event

RPMでインストールすると、デフォルトではpreforkで動いているらしい。
というわけで、確認してみる。セキュリティを考えると、全部晒すことはできないので、適当にマスキングした。
# どれが重要な情報なのか、いまいちわかっていない・・・。

$ /usr/sbin/httpd -V
Server version: Apache/2.2.X (Unix)
Server built:   AAA 99 200X 99:99:99
Server's Module Magic Number: 99999999:9
Server loaded:  XXX 9.9.9, XXX-Util 9.9.9
Compiled using: XXX 9.9.9, XXX-Util 9.9.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 
 以下略

httpd.workerというのもあり、こっちを指定して起動すると、workerで動くらしい。
ソースからコンパイルしなくても、もともと入っている。

$ /usr/sbin/httpd.worker -V
Server version: Apache/2.2.X (Unix)
Server built:   AAA 99 200X 99:99:99
Server's Module Magic Number: 99999999:9
Server loaded:  XXX 9.9.9, XXX-Util 9.9.9
Compiled using: XXX 9.9.9, XXX-Util 9.9.9
Architecture:   32-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"

 以下略

確かにworkerって書いてある。
というわけで、httpdで起動するか、httpd.workerで起動するかの指定を変えてあげれば、プロセスモードが切り替わるらしい。
書いてあるのは /etc/sysconfig/httpd だ。

$ less /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

確かにコメントアウトされている。OptionとかLANGとかもある。
きっとコメントをはずせば、workerになるんだろう。なるほど。

ちょっとずれるけど、ここでOption指定できたんだなぁ。あんまり考えたことなかったけど、いつかどこかで役に経つかも。
LANG変えるとどうなるんだろう・・・。デフォルトはC(英語)で動いているっぽい。ja_JP.UTF-8 とかにすると、ログに日本語が出るのか?そんな訳ないか。

変えてみたいけど、一応すでに運用しているからなかなか難しい。やっぱりステージング環境欲しいな。省スペース型のPCでいいから。

さてはて、まとめてみる。

  • デフォルトはprefork
  • workerにするには /etc/sysconfig/httpd のコメントをはずすだけ

変えるだけなら簡単じゃないか。
# eventについて、ほとんど無視した。
# 軽く調べた感じだと、ソースからコンパイルしないと無理っぽい。


参考にしたのは@ITの記事。Apache 2.0のないようだけど、2.2でもほとんど変わらなかった。
# というわけで、ほとんど記事をなぞっただけになってしまった・・・。