COBOL/エンタープライズ製品 技術情報(FAQ)


COBOLプログラムの実行時トレースの取得方法


CTFトレース

COBOLプログラムを実行する際には、コンパイルされたプログラムのオブジェクトコード (GNTコードなど) だけではなく、以下のような様々な弊社ランタイムソフトウェアコンポーネントが協調して処理を実現します。

1) COBOLランタイムシステム
2) ファイルハンドラ
3) ライセンス管理システム
4) Enterprise Serverの各種管理ソフトウエア


Visual COBOL、Server Express、Net Express には、COBOLプログラムの実行時に使用されるこれらのコンポーネントによって発生する各種イベントをトレースする機能が装備されています。これは CTFトレースと呼ばれ、トレース対象イベントをきめ細かなオプション設定によって取捨選択することができます。

機能の詳細は以下の製品マニュアル箇所を参照してください。

Visual COBOL
マニュアルトップから [プログラミング] > [問題解決と診断ツール] > [統合化トレース機能] へ進んでください。

Server Express
マニュアルトップから [リファレンス] > [統合化トレース機能] へ進んでください。

Net Express
オンラインヘルプトップから [リファレンス] > [統合化トレース機能] へ進んでください。

CTFトレースの主な利用目的は、お客様ではなく弊社の技術部門による障害解析です。お客様環境で発生している再現性のある障害の発生原因を解析するために、弊社カスタマーケアでは CTFトレースの取得をお願いすることがあります。以下本稿ではこのような場合にお客様が実施する作業の詳細と注意点を解説します。


トレースの取得方法

CTFトレースを取得するには以下の手順によります。

1) 作業ディレクトリの準備
トレースファイルを保存するためのディレクトリを新規作成します。解析対象プログラムを実行するユーザの書き込み権限を与えてください。なお、Enterprise Server配下で実行されるプログラムを解析対象とする場合には、新規作成ではなく対象サーバーインスタンスのシステムディレクトリを使うことをお薦めします。これによって Enterprise Serverのコンソールログやダンプファイルと一緒にディレクトリごとご提供いただくことができます。

2) 構成ファイルの準備
トレース対象イベントの選択を指定する構成ファイルは、カスタマーケアからの取得依頼の中で明示されますので、その内容のテキストファイルを ctf.cfg という名称で作成し、1) の作業ディレクトリに配備してください。

3) 環境変数の設定
プログラムを起動する前に以下の環境変数が設定されるようにします。

MFTRACE_CONFIG : 2) で準備した構成ファイルのパス名をフルパスで設定
MFTRACE_LOGS : 1) で準備した作業ディレクトリのパス名をフルパスで設定

例として Windows環境で作業ディレクトリが C:\foo の場合、以下のように設定します。

set MFTRACE_CONFIG=C:\foo\ctf.cfg
set MFTRACE_LOGS=C:\foo

Linux/UNIX環境で作業ディレクトリが /usr/hoge/foo の場合、以下のように設定します。

export MFTRACE_CONFIG=/usr/hoge/foo/ctf.cfg
export MFTRACE_LOGS=/usr/hoge/foo



4) 解析対象プログラムの実行
上記の環境変数が設定された状態で解析対象プログラムを実行します。この環境変数設定は、解析対象プログラムの実行時にどのような手段であっても有効になっていればトレースは取得されます。Windowsコマンドプロンプトや Linux/UNIX のシェルプロンプトから実行できる場合にはそのセッション内で設定することができます。
何らかのミドルウェア配下で自動実行されるようなケースでは、そのミドルウェアの提供する環境変数設定方法に従って設定する必要があります。例えば Enterprise Server配下での実行の場合は、お使いのサーバーインスタンスの [構成情報] の中で以下のように設定します:

[ES-Environment]
MFTRACE_CONFIG=/usr/hoge/foo/ctf.cfg
MFTRACE_LOGS=/usr/hoge/foo

この場合、ミドルウェア配下のすべての COBOLプログラムの実行に対してトレースが取得されてしまいます。このためこの方法によるトレースの取得では、環境変数が設定された状態で解析対象プログラムのみを実行してトレースを取得し、その後速やかに環境変数設定を解除してミドルウェアを再起動する必要があります。
推奨される方法ではありませんが、Windowsのグローバル環境変数として設定してもトレースは取得できます。この場合、解析対象プログラムのみならずすべての COBOLプログラムの実行に対してトレースが取得されます。従って取得が完了したら即座にグローバル環境変数の設定を解除してください。

5)取得された情報の送付
作業ディレクトリ全体を圧縮してカスタマーケアにご提供ください。
サイズが巨大化している場合は FTPサイトをご用意しますのでお申し付けください。


トレース取得のテクニック

1) 実行性能影響の最小化
CTFトレースは弊社のソフトウェアに統合的に組み込まれており、トレース取得に伴うオーバーヘッドをできる限り低減するように設計されています。トレース結果はテキスト形式で出力することもできますが、独自のバイナリ形式を選択することにより実行性能への悪影響をさらに低下させることができます。またバイナリ形式はトレース情報の出力ディスク容量も大幅に削減することができます。
実行性能影響はトレース取得の対象となるイベントの種類が増えるほど大きくなります。このため、実行性能への影響を最小化しなければならない状況では、カスタマーケアでは出力情報を絞り込んだ構成ファイルを提供します。そうでなければ、お客様の情報取得に所要する労力を低減するために一度になるべく多くの情報を取得するような構成ファイルを提供します。

2) トレース取得の有効化条件
CTFトレースは環境変数の設定によって有効化されます。COBOLプログラムを実行するプロセスが起動されて、ランタイムシステムの初期化が行われる中で、環境変数の設定に従って構成ファイルが読み込まれ、そこに記述されたオプションに従ってトレース情報を出力し続けるようになります。このため、環境変数の設定は COBOLプログラムが実行されるプロセスが起動される前に行われていることが必須となり、環境変数を設定する前に既に常駐していたようなプロセス内で実行されるプログラムに対しては効果を持ちません。
一方、同じ理由により、長時間実行されるプロセスの中で発生する障害に対してトレースを取得すると、障害発生時刻までに必要のない膨大な情報が出力されることにもなり得ます。これを防ぐ手段として、プログラム中で動的にトレース設定を有効・無効化する一連のライブラリルーチンが提供されており、問題発生個所に局所化したトレースを取得することも可能です。
また、Visual COBOL / Enterprise Developer 5.0 以降では、既に実行中のプロセスに対して外部から動的にトレース設定を有効・無効化するコマンドも提供されています(Windows環境のみ)。

3) 本番実行環境でのトレース取得
CTFトレースは、実行性能影響の最小化を意図して設計されていますが、それにもかかわらず、トレース取得に伴うオーバーヘッドは当然ゼロではありません。このため、本番実行環境でしか再現しないような障害事象であって、CTFトレースの取得が解析上必須と判断された場合には、事前に業務への影響を見極めた上で適用する必要があります。開発環境機上でのリハーサルを行うことを推奨します。
また、トレース取得の対象を可能な限り局所化し、業務への影響を抑止する必要があります。障害の発生する条件(特定プロセス、特定時刻帯など)を明確にし、その条件でのみ環境変数が設定されるような工夫が必要です。