Valenceのバックエンド側プログラムはWebサーバーのCGI(RPG SRVPGM)を使用しています。多数のアクセスが見込まれる場合には、Apache Webサーバーの最大CGIジョブ数と、サーバー始動時のジョブ数を調整することでパフォーマンスを向上させることができます。
Tips では、IBMi版 Apache WebサーバーのCGIジョブ設定方法についてご紹介します。
ValenceのCGIジョブについて
Valenceのバックエンド側プログラムは、Apache WebサーバーのCGIを使用しています。WebサーバーのCGIジョブはQHTTPSVRサブシステム下にPGM-QZSRCGIと表示されています。
クライアントからWebサーバーにリクエストが送信されると、待機しているPGM-QZSRCGIが実行(RUN)されてWebサーバーからブラウザにレスポンスが返却されます。
レスポンスを返却後、PGM-QZSRCGIは再び待機状態(TIMW)に変化します。
つまり、クライアントからのリクエストごとに、PGM-QZSRCGIのジョブが1つ使用されます。
Webサーバーへのリクエストがあり、全てのPGM-QZSRCGIジョブが使用中の場合、自動的にPGM-QZSRCGIのジョブが追加されます。
そのため、多くのクライアント端末から、たくさんのリクエストを処理する必要がある場合には、最大CGIジョブ数の設定と、サーバー始動時のジョブ数を適切に設定することでパフォーマンスを向上させることができます。
最大CGIジョブ数 設定方法
最大CGIジョブ数はPGM-QZSRCGIのジョブが作成される最大数の設定になります。
デフォルトでは「40」が設定されています。
設定は以下の手順で変更できます。
IBM Web Administration for iにアクセス
ブラウザのアドレスバーに以下のアドレスを入力します。
http://IBMi IP Address:2001/HTTPAdmin
「IBMi IP Address」の箇所は、利用しているIBMiのアドレスに合わせて変更してください。
上記アドレスにアクセスできない場合は、IBMi上でサービスが停止している可能性があります。
その場合は、以下コマンドでサービスを起動してください。
STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
http://IBMi IP Address:2001/HTTPAdminにアクセスすると、認証のダイアログが表示されます。Web関連サーバーを操作できる権限を持つユーザープロファイルを利用してログインしてください。デフォルトでは、*ALLOBJ と *IOSYSCFG の特殊権限を持つユーザーまたはそのグループ のユーザープロファイルのみが設定変更可能です。
最大CGIジョブ数の設定
IBM Web Administration for i にアクセス後、「管理」タブ > 「HTTPサーバー」タブ > 「サーバー」プルダウンから対象のValenceインスタンスを選択してください。
次に、左側メニューから「動的コンテンツおよびCGI」をクリックして、「動的コンテンツおよびCGI」の「一般設定」タブの「最大アクティブCGIジョブ数」を変更してください。
デフォルトでは40が設定されています。設定を変更後、「OK」ボタン、または「適用」ボタンをクリックすることで設定が保存されます。
※Webサーバーを再起動後に設定が反映されます。
サーバー始動時のジョブ数 設定方法
サーバー始動時のジョブ数の設定も、IBM Web Administration for i の「動的コンテンツおよびCGI」から行えます。「サーバー始動」タブを選択後、事前開始CGIヘルパージョブの設定で「追加」ボタンをクリックしてください。
プルダウンで、「CGIジョブ」、「ジョブ数」に事前に開始するジョブ数を指定します。
設定後、Webサーバーを再起動すると反映されます。
設定後、Valence起動時にPGM-QZSRCGIジョブが指定数作成されます。
事前にジョブを作成することにより、ジョブ作成時のオーバーヘッドを減らすことができます。
また、ジョブ数を40以上に設定する場合には、ツール > 構成ファイルの編集 にて ThreadsPerChildの設定を追加してください。
例) ジョブを100に設定する場合
ThreadsPerChild 100
ジョブ数設定の基準について
CGIの最大ジョブ数設定や、サーバー始動時のジョブ数の値が適切ではなく、多すぎる場合は、ジョブ数分のリソースを消費してしまうため、適正な数を設定する必要があります。
確認する方法としては、CGIの最大ジョブ数を100や150等の大きい値に設定後、多数のアクセスが予想される日のValenceジョブ数を確認します。
このジョブ数が、一番リクエストが多かった際の実行時ジョブ数になりますので、そのジョブ数をサーバー始動時のジョブ数に設定します。
アクセス数が多い場合には、CGIの最大ジョブ数、サーバー始動時のジョブ数を設定いただけますでしょうか。