Tips記事
» 2003年03月19日 12時04分 UPDATE

Apache2.0のPerchildでバーチャルホストを最適化する

[木田佳克,ITmedia]

 Apache2.0のhttpd.cpnf内には、Perchildと呼ばれる「MPM」(Multi Processing Module)設定項目がある。これは、バーチャルホストに効果的なものだ。

# vi /etc/httpd/conf/httpd.conf

〜中略〜

<IfModule perchild.c>
NumServers 30
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>

 Perchildでは、バーチャルホスト設定のドメインに指定プロセス数を割り当てることができる。また、固有のユーザーとグループIDを指定でき、バーチャルホストごとに独立した動作環境が構築可能だ。

 上記に挙げたモジュール設定項目のそれぞれは、「NumServer」がApache起動時に生成されるプロセス数、「StartThreads」はプロセス生成時に割り当てられるスレッド数、「MinSpareThreads」は予備スレッドの最小数、「MaxSpareThreads」が予備スレッドの最大数、「MaxThreadsPerChild」はプロセスごとの最大スレッド数、「MaxRequestsPerChild」が1プロセスで処理可能なスレッド数となる。

 ここで「プロセス」と「スレッド」の関係が重要となるが、Apache2.0と持ち味となっている機能だ。

 プロセスは、Apacheの起動中は増減しない。一方、スレッドはプロセスの子関係にあり、アクセス数に応じてスレッドが生成される。一定時間を置いてアクセスが減ると、スレッドも消失する。効果的にメモリが利用できる仕組みの1つといえる。

 上記のモジュール設定を確認後、次に挙げる設定をバーチャルホストの個所に加えればよい。

ChildPerUserID www_user1 www_group1 5
ChildPerUserID www_user2 www_group2 10

......

<VirtualHost 192.168.0.175>
AssignUserID www_user1 www_group1
ServerName zd1.example.co.jp
......

<VirtualHost 192.168.0.175>
AssignUserID www_user2 www_group2
ServerName zd2.example.co.jp
......

 上記の設定は、本題のMPMの1つPerchildを使いバーチャルホストに適用させている例だ。「www_user..」「www_group..」の文字列は実ユーザー(グループ)に設定する必要がある。この「ChildPerUserID ....」行で設定することにより、「ChildPerUserID www_user1 www_group1 5」の例では、ユーザー権限「www_user1」およびグループ権限「www_group1」で「5」つのプロセスが起動される意味となる。

 続けてバーチャルホスト「zd1.example.co.jp」に「AssignUser ...」行を記述することにより、この設定が関連づけられる。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ