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でもほとんど変わらなかった。
# というわけで、ほとんど記事をなぞっただけになってしまった・・・。