Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus HTTP Server


4.1.1 HTTP Serverのプロセス構造(UNIX版かつprefork MPMモジュールの場合)

〈この項の構成〉

(1) プロセス構造

HTTP Serverのプロセス構造を次に示します。

図4‒1 HTTP Serverのプロセス構造(UNIX版かつprefork MPMモジュールの場合)

[図データ]

HTTP Serverを起動すると,制御プロセスが起動します。制御プロセスは,リクエストを処理するサーバプロセスを起動し,その稼働を監視します。制御プロセスは,最初にStartServersディレクティブで指定した個数のサーバプロセスを生成します。その後のサーバプロセス数は,MinSpareServers,MaxSpareServersディレクティブ指定値に基づいて増減していきます。サーバプロセス数の最大値は,MaxClientsディレクティブで指定します。サーバプロセス数の増減は,制御プロセスが管理します。この処理をメンテナンスと呼びます。

クライアントからのTCP接続は,Listenディレクティブで指定したIPアドレスとポートからOSが受信し,OS内のListenキューに保留します。Listenキューのサイズは,ListenBacklogディレクティブで指定できます。Listenキューに格納できなかったTCP接続は確立されません。Listenキューに格納されたTCP接続は,サーバプロセスの一つが取り出して処理を行います。

一つのサーバプロセスは,一つのTCP接続を取得して処理します。また,一つのサーバプロセスは,MaxRequestsPerChildディレクティブに指定した個数のHTTPリクエストを処理すると終了します。このときは,制御プロセスが新たなサーバプロセスを生成して処理を続行します。

制御プロセスは,HTTP Serverを起動したユーザ,グループ権限で動作します。サーバプロセスは,User,Groupディレクティブで指定したユーザ,グループ権限で動作します。制御プロセスおよびサーバプロセスともに,プロセス名(実行プログラム名)はhttpsdです。制御プロセスのプロセスIDは,PidFileディレクティブに指定したファイルに出力します。

(2) プロセス数の遷移

メンテナンスは,サーバの負荷集中を避けるために,1秒ごとに2n−1(nは連続メンテナンス実行回数,6以上はn=6)個ずつサーバプロセスを生成します。サーバプロセスは,MinSpareServersディレクティブで指定した数の待ちプロセスができるかまたは全プロセス数がMaxClientsディレクティブで指定した数になるまで生成されます。1回のメンテナンスで8個以上のサーバプロセスを生成した場合は,エラーログ(infoレベル)にその旨出力します。

リクエストの処理が終了すると,サーバプロセスは待ち状態になります。待ち状態のプロセスが増加すると,メンテナンスのタイミングで,MaxSpareServersディレクティブで指定した数だけ残して,サーバプロセスを終了させます。

(a) 留意点

  • StartServersディレクティブには,Webサーバの起動・再起動直後から大量のリクエストを処理しなければならないような場合は,大きな値を指定してください。

  • Webサーバを起動したあとのプロセス数は,MaxSpareServersおよびMinSpareServersディレクティブによって制御されるため,StartServersディレクティブ指定値は意味がありません(HWSKeepStartServersディレクティブでOnを指定した場合を除く)。MinSpareServersおよびMaxSpareServersディレクティブは,急にリクエストが多発しても対応できるように待ち状態のプロセスを準備するために指定します。プロセスのメンテナンスでエラーログ(infoレベル)が頻繁に出力されるような場合には,待ちプロセス数を増やすよう調整してください。

  • より多くのサーバプロセスを常時待ち状態にしておくと,より多くのクライアントからの同時接続要求を受け付けられます。しかし,それだけサーバリソースを消費するために注意が必要です。

  • CGIプログラムの負荷が高くCPUを使い尽くしているような場合は,MaxClientsディレクティブの値を小さくしリクエストを受け付けないようにする必要があります。MaxClientsディレクティブで指定した数のプロセスがすべて処理中の場合は,ListenBacklogディレクティブの指定によって,キューに保留されます。

  • 一つのサーバプロセスは,MaxRequestsPerChildディレクティブで指定された回数のリクエスト処理を実行したあと,終了します。ただし,MaxRequestsPerChildディレクティブに0を指定した場合,リクエスト処理の回数でサーバプロセスが終了することはありません。MaxRequestsPerChildディレクティブの指定は,エンドユーザが作成したアプリケーションプログラムなどでメモリリークを起こすおそれがある場合に有効です。

  • サーバプロセスに異常終了シグナルが送信された場合(API接続モジュールで障害になった場合も含む),プロセスは,エラーログ(noticeレベル)にそのことを出力します。noticeレベルのエラーログは,LogLevelディレクティブの指定に関係なく出力されます。

  • StartServersディレクティブで指定した数のサーバプロセスを,MaxSpareServers,MinSpareServersディレクティブの指定に関係なく,常に起動しておきたい場合,HWSKeepStartServersディレクティブでOnを指定してください。サーバプロセス数がStartServersディレクティブで指定した数を下回った場合に,新しいプロセスを生成して回復します。

  • HTTP Serverが停止するとPidFileディレクティブに指定したファイルは削除されます。しかし,HTTP Serverを停止しないでマシンをシャットダウンした場合など,HTTP Serverが外部から強制的に終了させられたときには,PidFileディレクティブに指定したファイルは削除されないで,次回のHTTP Serverの起動に失敗する場合があります。HTTP Serverが起動していない状態でPidFileディレクティブに指定したファイルが存在する場合は,このファイルを削除してからHTTP Serverを起動してください。

(b) プロセス数の遷移例

HWSKeepStartServersの指定がOffの場合の,プロセス数の遷移例を図4-2に示します。

  • ディレクティブの指定値(HWSKeepStartServersの指定がOffの場合)

    StartServers 8
    MaxSpareServers 10
    MinSpareServers 5
    MaxClients 15
    HWSKeepStartServers Off
    MaxRequestsPerChild 10000
    KeepAlive Off
    図4‒2 プロセス数の遷移例(HWSKeepStartServersの指定がOffの場合)

    [図データ]

HWSKeepStartServersの指定がOnの場合の,プロセス数の遷移例を図4-3に示します。

  • ディレクティブの指定値(HWSKeepStartServersの指定がOnの場合)

    StartServers 8
    MaxSpareServers 10
    MinSpareServers 5
    MaxClients 15
    HWSKeepStartServers On
    MaxRequestsPerChild 10000
    KeepAlive Off
    図4‒3 プロセス数の遷移例(HWSKeepStartServersの指定がOnの場合)

    [図データ]