従来、意図的かどうかによらず(出力処理のループなど不具合事象も含めて)、ジョブ稼働時における大量SYSOUTデータの出力は、JES2スプールのスペースを強く圧迫する懸念があり、TSOログオン不可などの悪影響を及ぼす可能性があります。
$HASP050 JES2 RESOURCE SHORTAGE OF TGS - 80% UTILIZATION
$HASP355 SPOOL VOLUMES ARE FULL
■SYSOUTデータ大量出力の事例(z/OS V2R5)
※スプール・スペースの使用状況、および、消費量や消費スピードが大きいジョブの「トップ10」を表示可能(z/OS V2R3新機能)
【従来機能】
■JES2スプールへの出力制限を行う機能が、①OS(DD単位)、②JES2(バッチ・ジョブ単位)にてそれぞれ提供されています。
①JCL DDステートメントの「OUTLIM」パラメータ ・・・ OUTLIM=nnnnnnnn(1~16777215)
対象SYSOUTデータセットへの出力レコード数を制御し、出力処理中に「OUTLIM」パラメータ指定値に達した場合は、該当ジョブ・ステップがABEND722(RSN00000000)で処理完了
②JES2PARMの「ESTLNCT」ステートメント ・・・ NUM=nnnnnn|2,INT=nnnnnnn|2000,OPT=0|1|2
NUM(1~999999): $HASP375メッセージ(ESTIMATED LINES EXCEEDED)を最初に出力するタイミング(省略時値: 2000ライン)
INT(1~9999999): $HASP375メッセージ(ESTIMATE EXCEEDED BY nn LINES)を繰り返し出力するインターバル(省略時値: 2000ライン)
OPT(0|1|2): OPT(1)は$HASP375メッセージの最初の出力タイミングでABEND722(RSN00000000)発生、OPT(2)はOPT(1)の処理に加えてダンプ取得、省略時値のOPT(0)は処理続行
■z/OS V2R5の事例
【z/OS 3.1の新機能】 ※JOB resource limits
■z/OS 3.1では、システム全体に悪影響を及ぼすようなクリティカルな資源不足(枯渇)を回避するため、「従来機能」とは別に、「TG」(スプール・スペース: Track Group)、「JOE」(出力グループ: Job Output Element)資源それぞれの消費量をジョブ単位に監視し、さらに、制限値(LIMIT)に到達した際のJES2対応方法(ACTION)が選択可能になりました。
※「従来機能」は、DD単位、バッチ・ジョブ単位の出力量に着目 ・・・ z/OS 3.1でも継続して使用可能
※z/OS 3.1新機能は、ジョブ毎に資源全体の何%消費したかを監視 ・・・ 緊急サブシステム経由で実行可能な「特権ジョブ」(z/OS V2R3新機能)には適用不可
■TG/JOE資源それぞれに対して、Small/Large環境どちらかを判別し、Small環境では「75%」、Large環境では「25%」を制限値(LIMIT)としてアサインします。(省略時解釈)
※TG/JOE資源の制限値(LIMIT) ・・・ 特権ジョブ(PRIVILEGED)向けに予約済の資源を除いた「NON-PRIVILEGED」用のTG/JOE資源全体に対する割合(%)
■制限値(LIMIT)に到達した際の対応方法(ACTION)として、NONE/WAIT/FAILいずれかを選択することが可能です。(省略時解釈: WAIT)
①ACTION=NONE: JES2メッセージを出力して、対象ジョブは処理続行
➁ACTION=WAIT: JES2メッセージを出力して、対象ジョブは処理停止(スワップ・アウト状態)
③ACTION=FAIL: JES2メッセージを出力して、対象ジョブは処理失敗(例: ABEND722 RSN00000004発生)
④ACTION=DEFAULT: 「➁ACTION=WAIT」と同等 ➡ z/OS 3.1の省略時解釈は「③ACTION=WAIT」
■JES2PARMのJOBCLASSステートメントを使用して、ジョブ・クラス毎のLIMIT/ACTIONを明示指定(カスタマイズ)することが可能です。
※$TJOBCLASSコマンドによる変更可能
RESOURCE(TG)=(LIMIT=n|DEFAULT,ACTION=NONE|WAIT|FAIL|DEFAULT)
RESOURCE(JOE)=(LIMIT=n|DEFAULT,ACTION=NONE|WAIT|FAIL|DEFAULT)
■JES2ポリシー(タイプ: JobCreate/JobInput/PreConversion/JobConversion)を使用して、ジョブ毎のLIMIT/ACTION指定が可能です。(ジョブ・クラス指定値をオーバーライド)
※TG資源: TGResLimit、TGResAction属性
※JOE資源: JOEResLimit、JOEResAction属性
■TG/JOE資源それぞれの制限値(LIMIT)の90%/100%に到達した場合、新規メッセージが出力されます。
※$HASP1807メッセージ ・・・ 単一ジョブで制限値(LIMIT)の90%に到達した場合(90%は固定値)
※$HASP1806メッセージ ・・・ 単一ジョブで制限値(LIMIT)の100%に到達した場合
【「ACTION=WAIT」指定時の挙動・対応例】 ※省略時解釈
■z/OS 3.1新機能は、省略時解釈として活動化されます。(ACTION=WAIT)
■TG/JOE資源に対して$HASP1807メッセージの出力後、制限値(LIMIT)に到達すると、$HASP1806メッセージが出力されます。
※この時点で、該当ジョブにて「スワップアウト」発生(理由: DW - Detected Wait)
■$HASP1806メッセージ出力時は、「ジョブが所有するSPINデータセットを削除(PURGE)」、「JES2スプール・ボリュームを追加」、「ジョブをCANCEL/PURGE」などの一般的な対応に加え、制限値(LIMIT)に到達した単一ジョブに対して「RAISE_LIMITS」オペレーションを行うことが可能です。
※該当ジョブを対象に、TG/JOE資源の制限値(LIMIT)を一時的に「10ポイント」ずつ増加(TG/JOE資源ともに増加)
【考慮事項】
■単一ジョブによるTG/JOE資源の使用量が制限値(LIMIT)に到達しても、そのまま処理続行させる場合は、あらかじめ、「ACTION=WAIT」から「ACTION=NONE」パラメータ指定に変更しておく必要があります。
■「LIMIT=100,ACTION=NONE」パラメータ指定を行うことで、事実上の制限値(LIMIT)なし(制限しない状態)で稼働させることが可能です。
※「NON-PRIVILEGED」用のTG/JOE資源全体に対する、それぞれ90%に到達した場合、$HASP1807メッセージ出力
■「ACTION=FAIL」パラメータ指定の場合、例えば、SYSOUTデータを書き込み中にTG資源の制限値(LIMIT)に到達すると、「ABEND722 RSN00000004」で処理完了します。
※「RSN00000000」(従来機能)とは異なり、z/OS 3.1新機能が適用された場合は「RSN00000004」
■z/OS 3.1新機能によって影響を受けたジョブ($HASP1806メッセージ出力に至ったジョブ)の確認は、「$DJ(*),LIMITS_IMPACT=YES」コマンドにて可能です。
※$HASP1806メッセージは高輝度出力されず、コンソール上でスクロールされる点に注意
※「RAISE_LIMITS」オペレーションを実施したジョブは、「$DJ(*),LIMITS_RAISED=YES」コマンドにて確認可能
以上