2011年3月30日水曜日

wwwサーバとしてのApacheの役割

クライアントがURLを指定することで、httpdの様々な設定を記述しているWWWサーバ構成ファイル(/etc/httpd/conf/httpd.conf)に従い、指定されたルートディレクトリ(例えば /var/www/html )内のベージを提供します。

WWWサーバとしてはデファクトスタンダードとなっているApacheについて解説します。

httpdの起動と動作確認
httpdを起動させます。
# /sbin/service httpd restart

httpdを起動したらログを確認します。
# tail /var/log/httpd/error_log
# tail /var/log/httpd/access_log

動作確認
pingコマンドによるDNSサーバの名前解決テストとケーブルの接続確認テストを行います。
# ping ${ドメイン名}

ブラウザから http://${ドメイン名} で画面が表示されればOK

サーバーステータス情報の検索
ブラウザから http://${ドメイン名}/server-status/ でサーバステータスが表示されます。


Apacheの並行処理
不特定多数のクライアントから同時に接続されるネットワークサーバでは、処理が継続できるように並行処理を行う必要があります。Apacheは、多数の接続を同時に処理できるソフトウェアであり、並行処理の実装がサーバに大きな影響を与えます。

並行処理の実装モデルとしては下に挙げるものがあります。
*マルチプロセスモデル
        プロセスを複数生成して並行処理を実現する
*マルチスレッドモデル
        プロセスより軽量なスレッドを使い並行処理を実現する
*イベントドリブンモデル
        入出力を監視してイベント発生のタイミングで処理を切り替え、シングルスレッドで並行処理を実現する

Apacheの大きな特徴として、各種機能がモジュール化によりきれいに分離されています。並行処理を行う部分の実装もモジュールになっており、MPM ( Multi Processing Module ) と呼ばれています。MPMの設定次第で、並行処理のモデルを選択することができます。

どちらのモデルを選択しても基本的に、1クライアントに対して1プロセス/1スレッドが割り当てられます。Apacheの性能としては、同時にどれだけのプロセス/スレッドが生成できるかにかかっています。


■httpd.confの設定 (prefork)
UNIXとして代表的なMPMであるprefork ( マルチプロセスモデル ) を選択したとき、httpdの設定項目で重要となるのは、ServerLimitとMaxLimitです。

*ServerLimit
        サーバ数(プロセス数)の上限
*MaxLimit
        同時に接続できるクライアント数の上限

MaxClient > ServerLimit とすることはできません。さて、この値をどの程度に設定するかが問題になってきます。目安として、”サーバが搭載している物理メモリ量”と”1プロセスあたりの平均メモリ消費量”が挙げられます。

例えば下のようにして具体的に数を求めることになります。
・物理メモリ量:4GB
・httpdプロセス1つあたりのメモリ使用量:100MB
・OSが利用するメモリ:512MB
・(4GB-512MB) / 100MB = 35


preforkに関しては、コピーオンライトという親子でメモリを共有する機能があります。簡単にいうと、物理メモリに対して書き込みが行われていない領域は共有し続けることができ、これによりメモリ上のページの重複を避けて、メモリを効率的に利用することができます。なので、子プロセスのメモリ使用量は、親と共有していないメモリだけを考えればよく、MaxClientsの数はさらに増やすことができます。

しかし、コピーオンライトによるメモリの共有は、時間の経過とともに共有率が下がっていくことは簡単に想像できるでしょう。そこで、Apacheは、定期的に子プロセスを終了して新しい子プロセスを作成して、この状態を回避します。

*MaxRequestsPerChild
        例えば、1024と設定すると、1プロセスあたり1024リクエストを処理すると、このプロセスは終了して、
        親が新しい子を用意します。

0 件のコメント:

コメントを投稿