メモリー・リーク・プログラム
メモリー・リーク とは、繰り返しメモリーを割り当て、 それを使用してから、解放するのを怠ったために発生するプログラム・エラーのことです。
対話式アプリケーションなどの、長時間実行するプログラムでのメモリー・リークは、 重大な問題です。メモリーのフラグメント化や、実メモリーとページ・スペースに大部分ゴミが詰まった多数のページが累積する結果になるからです。 システムでは、1 つのプログラム内でのメモリー・リークが原因で、ページ・スペースを使い尽くしてしまうことが知られていました。
メモリー・リークは、svmon コマンドを使用して、 作業セグメントが増え続けるプロセスを探せば、検出できます。 カーネル・セグメント内のリークは、mbuf リークによって、またはデバイス・ドライバー、 カーネル・エクステンション、あるいはカーネルによっても、起きる可能性があります。 セグメントが増大しているかどうかを判別するには、 -i オプションを指定して svmon コマンドを使用し、プロセスまたはプロセスのグループを調べて、セグメントが増加し続けているかどうかを確認します。
問題のサブルーチンまたはコード行の識別はさらに困難で、特に AIXwindows アプリケーションでは、 多数の malloc() コールおよび free() コールが生成されます。 C++ には、メモリー使用率とリークの分析/チューニングのための HeapView Debugger が用意されています。 メモリー・リークの分析のためのサード・パーティー・プログラムが幾つか存在しますが、 それらのプログラムでは、プログラム・ソース・コードへのアクセスが必要になります。
一部の realloc() サブルーチンを使用すると、 実際のプログラミング・エラーではないのに、メモリー・リークと同じ影響をもたらす場合があります。 プログラムで、頻繁に realloc() サブルーチンを使用してデータ域のサイズを増やすと、realloc() サブルーチンによって解放されたストレージが、 何か他の用途に使用できない場合、プロセスの作業セグメントがどんどんフラグメント化される可能性があります。
# svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8535 2178 847 8533 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2357 2 0 2357
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
ginger :svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8589 2178 847 8587 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2411 2 0 2411
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8599 2178 847 8597 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2421 2 0 2421
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -