2

「メモリ リークをなくす」ことを試みているアプリケーションがあります。Totalview の MemoryScape を使用して Linux でしっかりとしたテストを行いましたが、リークは見つかりませんでした。アプリケーションを Solaris (SPARC) に移植しましたが、見つけようとしているリークがあります...

Solarisで「LIBUMEM」を使用しましたが、リークも発生しないようです...

これが私の起動コマンドです:

LD_PRELOAD=libumem.so UMEM_DEBUG=audit ./link_outbound config.ini

次に、Solaris の PRSTAT をすぐにチェックして、起動時のメモリ使用量を確認しました。

PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
  9471 root       44M   25M sleep   59    0   0:00:00 1.1% link_outbou/3

その後、アプリケーションに何千ものメッセージを送信し始めました...そして、時間の経過とともに PRSTAT が成長しました..

PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
  9471 root       48M   29M sleep   59    0   0:00:36 3.5% link_outbou/3

そして、最終的に停止する直前に:

PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
  9471 root       48M   48M sleep   59    0   0:01:05 5.3% link_outbou/3

ここで興味深いのは、このアプリケーションで LIBUMEM を使用すると、次のように 48 MB のメモリが表示されることです。

pgrep link
9471
# gcore 9471
gcore: core.9471 dumped
# mdb core.9471
Loading modules: [ libumem.so.1 libc.so.1 ld.so.1 ]
> ::findleaks
BYTES             LEAKED         VMEM_SEG CALLER
131072                 7 ffffffff79f00000 MMAP
57344                  1 ffffffff7d672000 MMAP
24576                  1 ffffffff7acf0000 MMAP
458752                 1 ffffffff7ac80000 MMAP
24576                  1 ffffffff7a320000 MMAP
131072                 1 ffffffff7a300000 MMAP
24576                  1 ffffffff79f20000 MMAP
------------------------------------------------------------------------
           Total       7 oversized leaks, 851968 bytes

CACHE             LEAKED           BUFCTL CALLER
----------------------------------------------------------------------
           Total       0 buffers, 0 bytes
> 

「7 つの特大リーク、851968 バイト」は、アプリケーションを介して 10 メッセージまたは 10000 メッセージを送信しても変化しません...常に「7 つの特大リーク、851968 バイト」です。それは「libumem」によるとアプリケーションがリークしていないということですか?

非常に苛立たしいのは、Linux ではメモリが一定のままであり、決して変化しないことです....しかし、Solaris では、このゆっくりとした、しかし着実な成長が見られます。

これが何を意味するか分かりますか?libumem を正しく使用していますか? ここで PRSTAT がメモリの増加を示している原因は何ですか?

これに関するどんな助けも大歓迎です....百万に感謝します。

4

2 に答える 2

2

SIZE列が成長しない場合は、リークしていません。

RSS(常駐セットサイズ)は、アクティブに使用しているメモリの量です。その値が時間とともに変化するのは正常です。漏れている場合は、SIZE時間の経過とともに大きくなります (RSS一定のままになるか、縮小することさえあります)。

于 2011-11-27T18:37:04.270 に答える