ダンプの採取とフォーマット

By 神居 - Posted: 2008/11/06 Last updated: 2009/11/11 - Leave a Comment

ダンプとはプログラムおよびプログラムが使用しているメモリー上のデータを、診断のためにデータセットに書き出したものです。プログラムが動いているジョブのアドレス空間のメモリー内容が出力されます。
MVSではプログラムが異常終了した時や、固まって動かなくなってしまった時(WAITやLOOP)はメモリーダンプを採って、そのダンプリストを基に異常の原因を調査することがよく行われます。アプリケーションの場合は使用する言語プログラム(COBOLやPL/Iなど)のデバッグ機能や、トランザクション処理システム(CICSやIMS)が提供する診断機能などを使いますが、アセンブラー言語で作成されたプログラムやミドルウェア製品自体に異常が起きた場合、ダンプは原因究明の重要な調査資料になります。


SYSUDUMPとSYSABEND

MVSではダンプは基本的な診断資料なので、特別な操作をしなくても必要なときに自動的に書かれます。
JCLにSYSUDUMP DD文またはSYSABEND DD文を定義すれば、プログラムが異常終了した時やCANCELコマンドでダンプの出力が指定された時に、MVSによってDD文に指定されたデータセットに出力されます。通常は出力先としてSYSOUTが指定されることが多いでしょう。

SYSUDUMPとSYSABENDには本質的な違いはなく、ダンプを採る範囲の違いによって使い分けられます。それぞれがどの範囲をダンプするかはMVSのパラメーターに定義されます。多くのユーザーではSYSUDUMPはユーザーアプリケーション用、SYSABENDはシステムプログラム用として使い分けられます。

予めダンプ出力用データセットを作成しておく場合は、PSデータセットとして容量のみを指定します。RECFM、ブロック長、レコード長はMVSがダンプ出力時に設定し直します。



システムダンプ(SVCダンプ)

システムダンプはSVCダンプとも呼ばれ、プログラムの異常終了ではなく、オペレーターがコマンドによって採取するダンプです。アドレス空間内の仮想記憶域の内容を書き出すので、アドレス空間ダンプとも呼ばれます。ダンプデータは予めシステムに定義したダンプ・データセット(SYS1.DUMPnn)に出力されます。SYSUDUMP、SYSABENDと違ってバイナリー形式のままなので解析には専用のユーティリティを使ってフォーマットします。OSのモジュールも異常を検知した場合などに、自らこの形式のダンプを出力します。
一般のプログラムでは通常使われませんが、ミドルウェアやISV製品などでは診断資料としてよく利用されます。特にWAITやLOOPなど、プログラムが正しく動けずに止まってしまっているような状態では、アドレス空間ダンプはエラーの状態のままメモリー内容がダンプされるため、より正確な診断が可能になります。

通常はRGNでリージョン全域を採れば十分ですが、必要に応じてCSAやLPA域を追加します。データベースのように複数の空間からのサービスを受けるようなプログラムではCSAやSQAなども必要となる場合があります。

DUMPコマンドを使用する前に、D DUMPコマンドで空きのダンプデータセットがあるかを確認します。必要ならばDD CLEAR,DSN=nnコマンドで使用済みダンプデータセットをクリアーします。(MSPとVOS3ではユーティリティによるクリアーが必要)




関連マニュアル

Posted in ありがたいサンプルJCL, システムプログラマーのための手引きいろいろ • • Top Of Page