2013-01-23 43 views
6

私が働いているアプリケーションのwebsocket接続に使用するJettyサーバがあります。唯一の問題は、Jettyがあまりにも多くの仮想メモリ(!2.5GBの仮想メモリ)と約650RESを消費していることです。Jettyのメモリ使用量の理解

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

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

(私の理解が間違っている可能性があるため)私は仮想メモリによって何を意味するのかを明確にしたかったのです。私が一番上に走ったときの仮想メモリは "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 

ありがとう!

+0

どのバージョンのJetty? –

+0

Joakim、私は8.1.7を使用しています。v20120910 – user220755

+0

でメモリ消費量をチェックしてください。totalMemory = Runtime.getRuntime()。totalMemory(); long freeMemory = Runtime.getRuntime()。freeMemory(); リターン(totalMemory - freeMemory); – Hurda

答えて

1

仮想メモリは64ビット環境では無償で提供されるため、懸念事項はわかりません。常駐メモリは650 MBで、わずか1.3%のMEMです。多くのメモリを使用していることは明らかではありません。

デフォルトの最大ヒープサイズは、64ビットJVMのメインメモリの1/4です。 48 GBのメモリを使用している場合、デフォルトのヒープサイズは12 GBで、一部の共有ライブラリ、スレッドなどを使用すると、12.5 GBの仮想メモリサイズになる可能性があります。これはメモリリークがあることを意味するものではなく、問題があることを意味するわけではありませんが、希望すれば最大ヒープサイズを減らすことができます。

目安:$ 200未満で32 GBを購入できます。あなたがメモリ不足で走っているなら、私はもう少し買うだろう。

+2

それは、より多くのメモリを購入することではなく、クライアントマシンで多すぎるメモリを消費することです。私のアプリが誰かのマシンにインストールされているときにJettyが12 GBのメモリを消費するのはあまりありませんか? :) – user220755

+1

これは_jetty_はこのメモリを占有していませんが、何が起こってもjettyに配備されると、jetty自体のフットプリントは小さくなります –

+0

常駐メモリが650 MBであることを指定します。共有メモリーとスレッドを含め、実際に使用しているメモリーの総量です。12 GBは、使用できる最大のヒープメモリです。 –

4

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

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

あなたのケースでは、Jettyは12,5ギガバイトのメモリを占有していません。それは603MBを占めている。例えば、 "virtual memory linux"のGoogleの場合、仮想メモリーと予約済みメモリーの違いに関する豊富な情報が必要です。