2

起動時に大量のメモリを消費するプロセスがありますが、プロセスのブートストラップ後にそのメモリのほとんどを解放します。その後に出力された TCMalloc 統計に次のように表示されます。

#012MALLOC:       16635888 (   15.9 MiB) Bytes in use by application
#012MALLOC: +            0 (    0.0 MiB) Bytes in page heap freelist
#012MALLOC: +     20007352 (   19.1 MiB) Bytes in central cache freelist
#012MALLOC: +     26367680 (   25.1 MiB) Bytes in transfer cache freelist
#012MALLOC: +      7030680 (    6.7 MiB) Bytes in thread cache freelists
#012MALLOC: +      1978560 (    1.9 MiB) Bytes in malloc metadata
#012MALLOC: =     72020160 (   68.7 MiB) Actual memory used (physical + swap)
#012MALLOC: +    239607808 (  228.5 MiB) Bytes released to OS (aka unmapped). ***
#012MALLOC: =    311627968 (  297.2 MiB) Virtual address space used

ここでは、約 228 MB が「OS に解放」されていることがわかりますが、これはまだプロセスの仮想アドレス空間の一部であることも示しています。これは、ps aux で見られる VSZ 統計が、このロギングが見られた後も高いままであるという事実によって裏付けられています。

strace を使用して同じプログラムを実行すると、brk へのすべての呼び出しが増加しており、munmap への呼び出し (サイズに関して) が mmap-ed (および上に示した) の量に達していないことがわかります。 . さらに悪いことに、私のプロセスがバックグラウンド作業を行っているため、VSZ は時間の経過とともにゆっくりと増加し、これらの統計がログに記録されるとそれに応じて (***) が増加することがログに示されます。

私の質問は次のとおりです。この値は何を表していますか? 私のメモリは解放されましたか?この消費量の増加を防ぐにはどうすればよいでしょうか?

4

1 に答える 1