2012-02-20 8 views
0

私は非常に大きなアプリケーションをデプロイしている、と私は、サーバーのは、「メモリ不足エラー」PermGenスペースエラー

を与えることを起動しようとしたとき:PermGenスペース

Tomcatを使用していますので、 5.5、私はbinフォルダの中に "setenv.bat"を持っていません。だから私は "catalina.bat"にあるJAVA_OPTSを設定しました。私はのように与えました。

set JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m -XX:NewSize=192m -XX:MaxNewSize=384m -Djava.awt.headless=true -Dhttp.agent=Sakai -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.lang.ClassLoader.allowArraySyntax=true 

しかし、まだ問題が存在します。上記のスニペットで変更する必要がある、または私のサーバーが上がるようにする必要があるものはありますか?

ありがとう、 Jeyaa。

+0

まず、VisualVMをこのプロセスに接続し、ヒープメモリと非ヒープメモリがどのように拡大するかを観察します。 512Moが本当にあなたのTomcatに許可されているかどうかを知っているでしょうが、なぜあなたが見つけなければならないでしょうか。 – Grooveek

+0

私は同様の問題があります。 jvisualvmや別のツールを使ってクラスローダーの漏れを確認する簡単な方法はありますか? –

答えて

0

Sun JVMを使用している場合は、Visual VM 1.3.3をダウンロードしてすべてのプラグインをインストールすることをお勧めします。スレッド、メモリなどが表示されます。

Visual VMを起動してから、Visual VMでJREを選択してTomcatを起動します。あなたは何が続いているのかを見ることができます。

あなたはそこに多くのメモリを持っています。これを実現するには、コード内で何かをやっていなければなりません。

0

私はあなたのPermGenスペースのサイズを確認し、-XX:MaxPermSize=1024mでMaxPermSizeを倍増してみGCスタットで

0

を見るためにJavaのHotSpotのディストリビューションに含まツールJVisualVMを使用することをお勧めします。問題が解決しない場合は、-XX:+HeapDumpOnOutOfMemoryErrorフラグを付けてOutOfMemoryErrorのヒープダンプを有効にしてから、メモリダンプをEclipse Memory Analyserで開き、そのメモリをすべて占有しているかどうかを調べます。メモリダンプには長い時間がかかりますので、忍耐強くしてください。プラグが必要なリークがあるかもしれません。例えば、無限に生成されているクラス、または多くの文字列がinternである。

動的に生成されたStringからLog4Jロガーを作成したため、Log4Jがこれらの文字列をすべて保持していたことが判明しました。これは、3日間実行した後、プログラムがPermGen空間にOOMでクラッシュしたことを意味していました。良くない。

0

あなたは堺を展開しているので、これらのJAVA_OPTSを使用すると、彼らは私が数年前から使用しているものですと、インストール小規模のために必要なすべてのようになります。

-server -XX:+ UseParallelGC -Xmx1024m -XXを:PermSize = 512m -XX:MaxPermSize = 512m -Djava.awt.headless = true -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING = false -Dsun.lang.ClassLoader.allowArraySyntax = true -Dhttp.agent = Sakai

特定の問題に対して、PermSize設定を増やすことが望ましいことに注意してください。

関連する問題