大量のジョブを登録する場合は、1つのジョブの中で複数単位の業務処理を実施し、ジョブ数をできる限り少なくするように設計してください。
ジョブごとにキュー制御、排他制御、ジョブ実行環境の作成などを行うため、ジョブ数が多くなるほどオーバーヘッドが大きくなります。また、スケジュールサーバと実行サーバが別々の場合、サーバ間の通信処理や、ジョブ出力ファイルの転送などのため、オーバーヘッドを伴います。
大量のジョブを登録する場合の指針
業務のジョブ登録量と各ジョブの処理時間を想定し、運用時間内に処理できることを検証してください。なお、ネットワークジョブの場合は、ネットワークジョブ環境で検証してください。
例えば、想定されるジョブの処理時間をsleepするような仮のジョブで業務モデルを用意し、運用時間内に処理できることを事前に検証してください。
[例] 業務モデル
ジョブ登録数 | 3,000 |
運用時間 | 1時間 |
ジョブの処理時間 | すべて1秒 |
上記の業務モデルを実行した結果、運用時間内にすべてのジョブが完了しなかった場合、ジョブの処理内容を見直して、複数のジョブの処理を1つのジョブにまとめてジョブ登録数を減らすなど、業務モデルを変更して再検証してください。
ジョブ数を少なくする方法
以下の例のようにジョブを作成し、できるだけジョブを少なくするように設計します。
例1:複数のコマンドを1つのシェルスクリプトとして登録する
[改善前]1つのコマンドを1つのジョブとして記述している
ジョブ1: date>>/var/tmp/gyoumu.log ジョブ2: gyoumushori.exe ジョブ3: date>>/var/tmp/gyoumu.log
[改善後]複数の処理をシェルスクリプトに記述し、1つのジョブとする
ジョブ1: date>>/var/tmp/gyoumu.log gyoumushori.exe date>>/var/tmp/gyoumu.log
改善前は、日付のログを取る、処理をする、再度日付のログを取るという3つのコマンドごとに、それぞれ1つのジョブとして登録されています。ジョブの実行ごとに多重度制限などのキュー制御の処理や、認証、内部ログイン処理、標準出力/エラー出力ファイルの準備などジョブ実行環境の生成処理のオーバーヘッドでCPU使用量が高くなり、本来の業務処理でCPUを有効に利用できないことがあります。3つのジョブを1つにすることで、ジョブ実行ごとの処理を減らします。
例2:JCL(業務手続き言語)のジョブステップを利用する
Systemwalker Operation Managerでは、JCL(業務手続き言語)を利用してジョブステップの構成でジョブを作成することができます。
1つのジョブに複数のジョブステップを記載でき、ジョブステップと対応づけてシェルスクリプトを起動できるので、複数のシェルスクリプトを1つのジョブとして構成することができます。
例えば10個のシェルスクリプトで1つの業務となるような処理が100個ある場合、ジョブステップを利用しないと1000個のジョブが必要ですが、ジョブステップを利用すると10個のシェルスクリプトは1つのジョブとして記述することができるため、100個のジョブに減らすことができます。
ただし、JCLの中でネットワークジョブを利用する場合は、ジョブステップ単位で実行先のサーバが指定でき、ジョブステップ単位で実行先サーバとの通信処理やジョブ出力ファイルの転送など、オーバーヘッドが伴うので、1つのジョブにまとめても性能上、有効にならない場合があります。
JCLの記述方法については、“Systemwalker Operation Manager リファレンス集”を参照してください。