21

のように見えます

 MemoryError: PermGen space
 java.lang.OutOfMemoryError: PermGen space

よくある問題です。パーマスペースのサイズを増やすことができますが、100または200の再デプロイ後はいっぱいになります。ClassLoaderのメモリリークを追跡することはほぼ不可能です。

本番サーバーでのTomcat(または別の単純なサーブレットコンテナ-Jetty?)の方法は何ですか?ソリューションを展開するたびにサーバーは再起動しますか?

多くのアプリケーションに1つのTomcatを使用していますか?

たぶん、異なるポート(または組み込みJetty)で多くのJettyサーバーを使用し、毎回アンデプロイ/再起動/デプロイする必要がありますか?

4

7 に答える 7

6

私はtomcatマネージャーの使用をあきらめ、今では常にtomcatをシャットダウンして再デプロイします。

同じサーバーで2つのTomcatを実行し、mod_proxy_ajpでapache Webサーバーを使用して、ユーザーが同じポート80を介して両方のアプリにアクセスできるようにします。これは、TomcatがダウンしているときにユーザーにapacheServiceUnavailableページが表示されるためにも便利です。

于 2010-08-19T22:16:21.227 に答える
3

次のJavaオプションを追加してみてください。

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

これにより、PermGenスペースでのガベージコレクションが有効になり(デフォルトではオフ)、GCがクラスをアンロードできるようになります。さらに、他の場所で説明されている-XX:PermSize = 64m -XX:MaxPermSize = 128mを使用して、使用可能なPermGenの量を増やす必要があります。

于 2010-08-22T11:04:26.570 に答える
2

はい、確かに、これは問題です。Tomcatサーバーで3つのWebアプリを実行しています。No.1はWebアプリケーションフレームワーク、Hibernateおよび他の多くのJARを使用しています。2はHibernateといくつかのJARを使用します。3は基本的に非常に単純なJSPアプリケーションです。

いいえを展開するとき。1、常にTomcatを再起動します。そうしないと、PermGenスペースエラーがすぐに発生します。No. 2は問題なく展開できる場合もありますが、そうでない場合は変更されることが多いためです。1も同様ですが、とにかく再起動がスケジュールされています。No. 3は全く問題なく、問題なく何度でも展開できます。

したがって、通常、Tomcatを再起動します。しかし、Tomcat 7も楽しみにしています。これは、さまざまなサードパーティのJARやフレームワークに埋め込まれている多くのメモリ/クラスローダーの問題を処理することになっています。

于 2010-08-19T12:27:11.940 に答える
2

HotSpotのPermGenスイッチは問題を遅らせるだけであり、最終的にはとにかくOutOfMemoryErrorが発生します。

この問題は長い間発生しており、これまでに見つけた唯一の解決策は、代わりにJRockitを使用することです。PermGenがないため、問題は解消されます。現在、テストサーバーで評価を行っており、切り替え後、PermGenの問題は1つも発生していません。また、最初の再デプロイ時にこのエラーが発生するアプリを使用して、ローカルマシンに20回以上再デプロイしようとしましたが、すべてがうまくいきました。

JRockitはOpenJDKに統合されることを意図しているため、この問題は将来的にストックJavaでも解消される可能性があります。

http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html

また、HotSpotと同じライセンスの下で無料です。

https://blogs.oracle.com/henrik/entry/jrockit_is_now_free_and

于 2012-02-21T20:03:34.277 に答える
1

どのバージョンのTomcatを使用していますか?Tomcat 7および6.0.30には、これらのリークを回避するための、または少なくともそれらの原因について警告するための多くの機能があります。

このテーマに関するSpringSource(および長年のTomcatコミッター)のMarkThomasによるこのプレゼンテーションは非常に興味深いものです。

于 2012-04-24T20:29:20.433 に答える
1

PermGenガベージコレクションを有効にする必要があります。デフォルトでは、Hotspot VMはPermGenガベージを収集しません。つまり、ロードされたすべてのクラスファイルは永久にメモリに残ります。新しいデプロイメントごとに、クラスファイルの新しいセットがロードされます。これは、最終的にPermGenスペースが不足することを意味します。

于 2010-12-10T12:25:36.083 に答える
1

参考までに、PermanentGenerationリークも監視および検出できる新しいバージョンのPlumbrツールがあります。

于 2012-07-17T08:57:46.207 に答える