0

最近、Maven ベースの Web プロジェクトを作成し、Tomcat をアプリケーション サーバーとして使用してデバッグしました ...

しかし、Tomcat は、プロジェクトのコンテキスト メニューから直接アプリを実行した後、頻繁に停止します (メモリ不足を意味する pergem エラー)。

最悪の場合、多くのアイドル スレッドが作成され、それらはすべて手動で強制終了できません。

また、Tomcat の状態も NetBeans によって検出されず、停止および再起動できません。それらをきれいにするためにシステムを再起動する必要があります。

私のシステムは Fedora 12 x86 です... Java のバージョンは SUN JDK 6 update 17 です。NetBeans のバージョンは 6.7.1 です。

私はこれについてバグを作成しようとしましたが、NetBeans 開発者はそれを拒否しました... これが NetBeans を使用して Web アプリケーションを開発する大きな障害になっていることに非常に驚いています。

今日、最新の NetBeans 6.8rc1 で JBoss 5.1 を使用しましたが、同じ問題に遭遇しました... VM パラメータを調整してより多くのメモリを割り当てようとしましたが、効果はありませんでした。

seam ant build script を介していくつかの seam サンプルを JBoss 5.1 にデプロイしましたが、問題はありません。しかし、これを行うために NetBeans を使用するように切り替えました。メモリ不足のために失敗しました。

なにが問題ですか????

4

1 に答える 1

4

(あなたが話しているアイドル スレッドはアプリケーション スレッドであると想定しています。Tomcat のワーカー スレッドについて話しているのであれば、アイドル時に permgen の問題を引き起こすべきではありません。)

これについてバグを作成しようとしましたが、NetBeans 開発者はそれを拒否しました...とても驚きました...

私はとても驚かない。これは実際には NetBeans の問題ではありません。Tomcat や JBoss の問題ではありません。

アイドル/孤立したアプリケーション スレッドの問題は、実行中の JVM でスレッドを安全に強制終了できないことです。そして、これを行う能力がなければ、(この場合) permgen スペースのリークを止めることはできません。これは本質的に Java プラットフォームの問題です。これは、JVM が JSR 121 で定義された Isolate メカニズムをサポートしている場合にのみ解決できます。

しかし、問題がホット デプロイメントの実行に関連していると仮定すると、心配する必要があるのはアイドル状態のアプリケーション スレッドだけではありません。再デプロイするクラスの到達可能なインスタンスがある場合、元の古いクラス ローダーとそれがロードしたすべてのクラスが到達可能なままになります。

... これは、NetBeans を使用して Web アプリケーションを開発する大きな障害です。

解決策は、Web コンテナを時々再起動することです。これにより、アイドル状態のスレッドやその他のクラフトが一掃され、漏れた permgen スペースが解放されます。より大きなヒープとより多くの permgen で実行することで改善できますが、特に孤立したスレッドの一部がアイドル状態でない場合は、それをなくすことはできません...

そうそう、そして大きな赤ちゃんにならないでください!これはショーストッパーではなく、ほんの少しの不便です:-)

于 2009-12-07T06:45:08.537 に答える