2012-02-08 16 views
2

私は、設定:-Xmx2048M、-Xms2048M、-XX:MaxPermSize = 256Mのアプリケーションを持っています。
時々私は、ログ内のメッセージの多くを得る:OutOfMemoryErrorとUnloadingクラスsun.reflect.GeneratedMethodAccessor

[Unloading class sun.reflect.GeneratedMethodAccessor9] 
[Unloading class sun.reflect.GeneratedMethodAccessor129] 
[Unloading class sun.reflect.GeneratedMethodAccessor12] 
[Unloading class sun.reflect.GeneratedMethodAccessor11] 
[Unloading class sun.reflect.GeneratedMethodAccessor12] 
[Unloading class sun.reflect.GeneratedMethodAccessor11] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor29] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor25] 

とエラーが表示されます。

のOutOfMemoryError:Javaヒープスペース

この記事を読んだ後:
http://anshuiitk.blogspot.com/2010/11/excessive-full-garbage-collection.html
私が知っている、ということクラスはPerm Genにロードされており、エラーが発生するはずです:

OutOfMemoryErro r:PermGenスペース。

私の質問OutOfMemoryError:Javaヒープスペースの代わりに
OutOfMemoryError:PermGenスペース?

答えて

2

これは、あなたがヒープ領域が不足していること(あるいはあなたには、いくつかの理由で成長できないスペースがある)

にのみ、このスペースの最大がなくなった理由としてPermGen space.を取得します。

つまり、ヒープスペースが拡張されてオブジェクトを保持できないため、このエラーが発生しています。

+0

お返事ありがとうございます。しかし、このメッセージ[Unloading class sun.reflect.GeneratedMethodAccessor9]は、Perm Genの問題を示しています。なぜOutOfMemoryError:PermGenスペース、またはおそらく最初のOutOfMemoryError:PermGen、次にOutOfMemoryError:Javaヒープスペース? – luk4443

+0

PermGenがクリーンアップされたことを示すメッセージです。それ以上はありません。あなたは常に 'OOME Java heap space 'の前にFull GCを取得し、パーマネントを含むすべての領域をクリーンアップします。(そこに十分なスペースがあっても) –

+0

これまでのところ、このOutOfMemoryErrorはソフトリファレンスGCが適切にクリーニングできない場合しかし、それはOOMEの別の理由があるようですね? – luk4443

0

@Peterのように、ヒープの問題です。アンロードは、ガベージコレクション全体の副作用であり、何も起こっていないことを示すものではありません。ここで

はOOMsを解決しないようにする方法を次のとおりです。

  • ヒープがホットスポットにOOM -XX:+HeapDumpOnOutOfMemoryErrorにダンプできるように、オプションはパフォーマンスの低下
  • 研究ヒープダンプを持っていない、あなたがリークを持っている場所を理解したり、例えばヒープのオーバーコミットされた使用データベースからの巨大な選択。
  • ヒープ解析に習熟したら、開発中にjmap経由でヒープダンプを取得し、リークを分析します。
  • 生産中にリークが発生する可能性があると思われる場合:パフォーマンスヒットがほとんどないため、jmap -histoは良いオプションです。