6

作業中のアプリの websocket 接続に使用する Jetty サーバーがあります。唯一の問題は、Jetty が大量の仮想メモリ (!2.5GB の仮想メモリ) と約 650RES を消費していることです。

私の問題は、上記のように、ほとんどのメモリ (約 12 GB) がヒープ サイズではないため、それを分析して何が起こっているのかを理解するのが難しいことです。

12 GB の消費がどこから来ているのかを理解する方法と、サーバーのメモリ リークやその他の問題を把握する方法についてのヒントはありますか?

仮想メモリの意味を明確にしたかったのです (私の理解が間違っている可能性があるため)。topを実行すると、仮想メモリは「VIRT」になります。ここに私が得るものがあります:

PID USER PR  NI  VIRT  RES  SHR S   %CPU %MEM  TIME+  COMMAND                                        
-------------------------------------------------------------                                        
9442 root 20 0   12.6g 603m  10m S   0    1.3   1:50.06 java

ありがとう!

4

2 に答える 2

5

起動時に使用する JVM オプションを貼り付けてください。前述のように、-Xmx オプションを使用して、JVM が使用する最大メモリを調整できます。

アプリケーションは 603MB の予約メモリしか使用していません。ですから、あなたに関係があるようには見えません。「jmap」を使用するか、jmx を有効にして jconsole 経由で接続するか、プロファイラーを使用することで、メモリ使用量に関する詳細情報を取得できます。*nix ランドにとどまりたい場合は、OS がサポートしている場合は「無料」で試すこともできます。

あなたの場合、Jetty は 12.5 ギガのメモリを占有していません。603MBを占めています。たとえば、「仮想メモリLinux」をGoogleで検索すると、仮想メモリと予約済みメモリの違いに関する多くの情報が得られるはずです。

于 2013-01-25T12:44:51.507 に答える
1

仮想メモリは 64 ビット環境ではほとんどコストがかからないため、何が問題なのかわかりません。常駐メモリは 650 MB または MEM のわずか 1.3% です。多くのメモリを使用していることは明らかではありません。

デフォルトの最大ヒープ サイズは、64 ビット JVM のメイン メモリの 1/4 です。48 GB のメモリがある場合、デフォルトのヒープ サイズは 12 GB で、一部の共有ライブラリやスレッドなどでは、仮想メモリ サイズが 12.5 GB になることがあります。これは、メモリ リークや問題があるという意味ではありませんが、必要に応じて最大ヒープ サイズを減らすことができます。

ところで: 200 ドル未満で 32 GB を購入できます。メモリが不足している場合は、さらに購入します。

于 2013-01-23T22:20:04.003 に答える