★Apacheは、モジュールによって機能を追加する。組み込まれているモジュールは、以下のようにして確認できる
/usr/sbin/httpd -l
core.c
prefork.c ーープロセス
http_core.c
mod_so.c
Apache 2.0ではDSO(Dynamic Shared Object)を利用し、
実行時にモジュールを組み込む。
LoadModule php5_module modules/libphp5.so
★コンパイルオプション(稼働モードなど)を確認できる
/usr/sbin/httpd -V ←「-V」でコンパイルオプションを確認
Server version: Apache/2.0.54
Server built: May 23 2005 08:12:24
Server's Module Magic Number: 20020903:9
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork" ←preforkになっている
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
★httpdの設定のみをチェックする
# /usr/sbin/httpd -t
★プロセス数関する設定
<IfModule prefork.c>
StartServers 8 立ち上げた際に最初に起動するプロセス数
MinSpareServers 5
MaxSpareServers 20 常時待機しているようにプロセス数
ServerLimit 256
MaxClients 256 上限プロセス数
MaxRequestsPerChild 4000 プロセスを定期的に再起動させる
処理中、メモリーの申請と放棄繰り返し、メモリーの利用効率が悪くなる。
一定回数に達すると、使い捨て。
</IfModule>
MaxClients=使用可能なメモリ量/Apacheの1プロセスが使用するメモリ量
難しい作業ね。1プロセスは、経験的には、静的コンテツの場合で数Mbytes、動的コンテンツで20?30Mbytes
値を少しずつ上げていき、vmstatやtopなどのコマンドでスワップへの書き込みが発生しない値にする
psコマンドでは、「VSZ 仮想」と「RSS物理」の値に注目
topコマンドの場合は、「VIRT仮想」と「RES物理」の値に注目
★Apache 2.0のデフォルト設定はプロセスベースの処理になっているため、
スレッドを使用する時、下記を修正する
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker ←httpdかhttpd.workerを指定
スレッドの設定
<IfModule worker.c>
ServerLimit プロセス
StartServers 2 プロセス
MaxClients 150 thread
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 1つのプロセスで生成されるスレッド数
MaxRequestsPerChild 0
</IfModule>
MaxClients数=ThreadsPerChild数×プロセス数
★セキュリティ設定
・OS情報
ServerTokens ProductOnly
ServerSignature Off
・
<Directory />
(省略)
AllowOverride None ←.htaccessによる制限上書きを禁止
</Directory>