2016-04-11 11 views
0

CICSトランザクションでメモリリークを検出しようとしています。このトランザクションはCobolプログラムを実行し、C DLLを呼び出して、ソケット、いくつかのmallocに接続し、メモリを切断して解放します。CICSトランザクションが終了時にリソースを解放しない

このトランザクションはメモリをリークしていますが、停止したときにメモリを解放しません。私は注意深くmallocとfrees(getaddrinfo/freeaddrinfoと同様)を慎重にマッチさせました。私はCICSの外で同じcobolプログラムをテストしましたが、漏れません。

変換が戻ったときにリソースが解放されるようにするCICS設定を教えてください。また、メモリリークをデバッグするためのヒントはありますか?もしそれがmallocsでないなら、他に何ができますか?私はTCPIP getaddrinfo/freeaddrinfoがSYSTCPTに記録されていることに気付きました。これはCICS領域のスペースを使用していますか?

答えて

0

CICS releases storageは、言語環境(LE)エンクレーブ終了時にトランザクションで実行されるコードによって割り当てられます。 C DLLがそのランタイムにLEを使用しない場合は、C DLLによって使用されているランタイムの動作が必要です。

あなたはソケットを使って言及します。 C DLLがcompiled and linkedでCICSソケットインタフェースを使用していなかった場合は、C DLLが使用しているランタイムの動作が必要です。

CICS Sysprogは、CLERトランザクションを使用してLEランタイム・オプションを動的に変更できます。 RPTSTGオプションは有用な情報を明らかにする可能性があります。

CICS Sysprogは、CETRトランザクションを使用してストレージ管理のトレースを開始できます。これはかもしれない有用な情報を明らかにする。

は、C DLLが実行時にLEを使用していないと、これらの手法が役立たない可能性があるため、有用な情報を明らかにします。

+0

C DLLはCICSソケットでコンパイルされ、LEを使用します。 –

+0

RPTSTGはHEAPがHEAP(4096,4080、ANYHHERE、KEEP、4096,4080)に設定されていることを示します。 –

+0

@MichaelTaylorは、CICS SYSPROGにトレースを実行し、解釈させるように依頼します。 – cschneid

0

したがって、私たちのバージョンのz/OSおよびCICSでは、CICS TCPIPライブラリーにバグがあると答えています。あなたのコードにリンクしなければならないモジュールEZACIC17は、getaddrinfo()が割り当てた構造体を間違ってマークするバグがあります。 freeaddrinfo()を呼び出すと、このメモリーは解放されず、最終的にはCICS領域の記憶域が不足します。当社の開発システムはz/OS 1.8であり、CICSはV3.1であり、そのバージョンの修正はありませんので、アップグレードする必要があります。

malloc()で割り当てられたCプログラム内のすべてのメモリは、free()で解放されると解放されます。ただし、明示的に解放されていないリソースは、アプリケーション/トランザクション終了時に返されません。 Outアプリケーションは、メモリに留まるように見えるC DLLを使用します。アプリケーションを再度実行すると、CICSで使用されるメモリーの総量は一定のままです。だから私たちのコードでメモリリークがない限り、CICSのメモリ使用量は増加しません。

関連する問題