2

私は、数週間の操作の後、アプリの速度が低下し、正常に動作し、速度が低下し、正常に動作し、低速と正常に動作する間隔がどんどん短くなるという、時折発生する問題に関する情報を収集しようとしています。私の理論では、時間が経つにつれて、私たちはより頻繁にゴミを収集しているということです。その他の重要な情報は、OOMPermGenの問題が発生することがあるということです。

有効なverbose:gcを配置すると、catalina.outにGC出力が表示されます。ただし、次の情報に基づいて、PrintGCDetailsフラグを追加する必要があると思います。

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

後者のフラグを有効にすると、「Tenured」メモリの収集に関する情報が出力されます。問題は、PermGenエラーの原因となるメモリなのか、それとも何か違うのかということです。また、異なる場合、PermGenスペースを表示する情報をログに記録するにはどうすればよいですか?

編集-残念ながら、この環境ではjvm監視ツールを接続できません。

編集-私は前述の構成オプションを追加しました。また、保有期間の配布を印刷するためのオプションも追加しました。

27.701: [GC 27.701: [ParNew
Desired survivor size 2162688 bytes, new threshold 4 (max 4)
- age   1:    1906560 bytes,    1906560 total
- age   2:       2064 bytes,    1908624 total
- age   3:       5064 bytes,    1913688 total
- age   4:     650368 bytes,    2564056 total
: 35684K->2678K(38336K), 0.0068580 secs] 224179K->191173K(1065664K), 0.0069700 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

ParNew世代はpermgenスペースですか?

 (concurrent mode failure): 25387K->31940K(1027328K), 0.2983200 secs] 50714K->31940K(1065664K), [CMS Perm : 35273K->35139K(35392K)], 0.2985210 secs] [Times: user=0.30 sys=0.00, real=0.30 secs] 
 (concurrent mode failure): 25356K->31941K(1027328K), 0.3032690 secs] 50861K->31941K(1065664K), [CMS Perm : 35264K->35129K(35392K)], 0.3034800 secs] [Times: user=0.30 sys=0.00, real=0.31 secs]

失敗は私を悩ませています。

よろしくお願いします

4

2 に答える 2

4

TenuredとPermGenは同じではありません。それらは関連していますが、同じものではありません。正確な詳細は、使用しているJVMの実装によって異なりますが、リンクしたドキュメントからは次のようになります。

「テニュア世代と密接に関連する第3世代はパーマネント世代です。パーマネント世代は、Java言語レベルで同等性を持たないオブジェクトを記述するために仮想マシンが必要とするデータを保持するため、特別です。たとえば、クラスを記述するオブジェクトとメソッドは永続的な世代に保存されます。」

インターンされた文字列やクラスの詳細などは通常PERMに格納されますが、長寿命のJavaオブジェクトはTENUREDです。

これがPermGen(およびそれを微調整する方法)を説明するまともな記事です:http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

于 2010-12-02T16:03:30.227 に答える
1

文字列をインターンしますか、それともクラスをロードしますか?

私がpermgenスペースを使い果たした2つのことは、あるべきではない文字列をインターンするとき(したがって、あらゆる種類のガベージ収集不可能な文字列をぶら下げる)と、新しいクラスのロードによって引き起こされる古いクラス定義(通常、Tomcatの再デプロイ後十数かそこらこれは私たちのために起こる可能性があります)。

再デプロイの問題についてはTomcat6の方が優れていて、7で修正されるはずだったことを覚えているようですが、それは頭から離れています。

外部ライブラリまたはネイティブコードライブラリを使用していますか?それらがリークするリソースがpermgenに対してカウントされても驚かないでしょう(単なる推測です)。

于 2010-12-02T16:23:00.837 に答える