回答:
ヒープ(-Xms
およびで指定-Xmx
)に加えて、非ヒープ領域を含める必要があります。これらには
DirectByteBuffer
sの取得元)、これは最初は64MBです数十MBになるJVM自体の作業スペースもあります。
サーバークラスマシンを使用する場合は、Sun JVMの自動サイズ設定にも注意する必要があります。時間の経過とともに、サーバークラス(2Gbメモリ、複数のコア)の定義がいくらか下落し、現在ではほとんどのマシンが-server
最適化をトリガーできるようになっています。私のアドバイスは、-Xms
と-Xmx
設定を指定し-server
、正当な理由が考えられない限り合格することです。
-Xmxオプションを使用すると、JVMが予約するヒープのサイズを制限します... JVMが必要とする追加のリソースがあります...
「メモリをありがとう」*は、JVMがメモリを使用する方法を説明する優れた記事です...
IBMのJVMを試すことができることは別として、Tomcatで動作するはずです。無料のJVM実装の一部が動作するかどうかはわかりません。
それでも、メモリの少ないマシンでうまくいくとは思いません。Javaにはメモリが必要です。
*新しいユーザーはハイパーリンクを送信できないため、その記事を自分で検索する必要があります...これは、「メモリibmに感謝します」というgoogleの最初のヒットです。
メモリフットプリントが少ないJRockit JVMも試してください。引き続き、BEAライセンスのJRockitバージョンを無料でダウンロードできます。つまり、OracleがBEAを引き継ぐ前のバージョンです。
ダウンロードリンクについては、http://forums.oracle.com/forums/thread.jspa?threadID = 816133&tstart = 0を参照してください。
私が見つけた便利なテクニックの1つは、JMXモニタリングを使用して、ヒープスペースとpermgenスペースで使用されているメモリの量を正確に確認することです。
http://tomcat.apache.org/tomcat-6.0-doc/monitoring.htmlの説明に従って、TomcatでJMXを設定します
次に、JConsole(JDK 5またはJDK 6に付属)を使用します。メモリータグは、時間の経過に伴うメモリー消費を追跡します。
また-webappsのソフト再起動に注意してください。ウェブアプリをリロードすると、permgenスペースはガベージコレクションされず、時間の経過とともに蓄積されます。permgenスペースを再利用するには、Tomcatを完全に停止/開始する必要があります。