0

XenVPSLinux 3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012 i686 i686 i386 GNU/Linuxでの使用。

Grails Javaアプリを実行する前に、実行すると次のことがfree -m示されます。

             total       used       free     shared    buffers     cached
Mem:          4031        155       3875          0         30         87
-/+ buffers/cache:         37       3994
Swap:         8191          0       8191

Grailsアプリを実行し、メモリを大量に消費する処理を実行し、を介して終了するとCtrl-C、次のようになります。

             total       used       free     shared    buffers     cached
Mem:          4031       1031       2999          0         33        957
-/+ buffers/cache:         40       3991
Swap:         8191          0       8191

再起動するまで変更されないようです。topmemの使用量が多いことを示すものではありps auxません。Grailsアプリは、このマシンで実行する唯一のアプリです。

おそらく私はこれを誤解していますが、メモリが終了後に解放されていないように見えるのではないかと心配しています。通常、メモリリークが疑われますが、Javaアプリが終了したら、どうすればそれが可能になりますか?

4

1 に答える 1

2

あなたは実際にコマンドの出力を誤って解釈しています。

このMem行は、カーネルによって現在割り当てられているメモリの量を示しています。ただし、カーネルはメモリを遅延的に解放します。他のプロセスがメモリを要求していない場合は、割り当てられたページを保持する可能性があります(ディスクから読み取られたものなど)。

「クリーンな」使用済み/空きメモリが表示されている-/+ buffers/cache行は、メモリ使用量がほぼ同じであることがわかる行です。

Webで、たとえばここで、より詳細な説明を見つけることができます。

于 2012-08-30T08:42:30.977 に答える