1

同様の質問がありますが、懸念による回答はありません..

ここでは、「この問題を回避するための 1 つのハックは、JDBC ドライバーがアプリケーションのクラスローダーではなく共通のクラスローダーによってロードされることであり、ドライバーの jar を Web アプリケーションの war ファイルにバンドルする代わりに tomcat lib に転送することでこれを行うことができます。

一般的なクラスローダによるロードの意味と、アプリケーション クラスローダとの違いがわかりませんでした。

4

3 に答える 3

1

OutOfMemoryError: PermGen space通常、Tomcat のホット再デプロイ機能を使用している場合にのみ問題になります。また、デプロイメントで非常に多数のクラスが使用されている場合にも発生する可能性があります。

VM で使用可能な PermGen の量を増やすと、多数のクラスの問題が解決されます。これは、環境変数orに-XX:MaxPermSize=128morを追加することで実行できます(これは通常、Tomcat 起動スクリプトで実行できます)。Tomcat を直接起動する場合は、シェルでこれらの環境変数をエクスポートできます。-XX:MaxPermSize=256mJAVA_OPTSCATALINA_OPTS

残念ながら、これは再デプロイの問題を完全に解決するものではなく、PermGen を使い果たす前に何度も再デプロイできるようにするだけです。この問題を解決するには、Web アプリが正しく完全にアンロードされるようにする必要があります。これには、webapp によって開始されたすべてのスレッドが停止すること、およびロードされた JDBC ドライバーが適切に登録解除されることなどが含まれます。これを解決するもう 1 つの方法は、ホット再デプロイを使用せず、アプリケーションに変更を加えるときに Tomcat を再起動することです。

于 2013-10-09T13:35:09.513 に答える