1. ホーム
  2. java

[解決済み] メモリリークを防ぐため、JDBCドライバの登録を強制的に解除しました。

2022-03-17 02:15:03

質問

Webアプリケーションを実行すると、このメッセージが表示されます。正常に動作しているのですが、シャットダウン時にこのメッセージが表示されます。

<ブロッククオート

SEVERE: WebアプリケーションでJBDCドライバ[oracle.jdbc.driver.OracleDriver]を登録しましたが、Webアプリケーションの停止時に登録解除に失敗しました。メモリリークを防ぐため、JDBCドライバは強制的に登録解除されました。

よろしくお願いします。

解決方法は?

バージョン6.0.24以降、Tomcatには メモリリーク検出 この機能は、ウェブアプリの /WEB-INF/lib どの自動 登録 を使ってウェブアプリの起動時に自分自身を呼び出します。 ServiceLoader API が、自動化されていない 登録解除 は、ウェブアプリのシャットダウン中に このメッセージは単なる非公式なもので、Tomcatはすでにそれに応じてメモリリーク防止策をとっています。

どうすればいいのでしょうか?

  1. これらの警告は無視してください。Tomcatはちゃんと仕事をしているのです。実際のバグは他の人のコード(問題のJDBCドライバ)にあり、あなたのコードにあるわけではありません。Tomcatが正しく仕事をしたことを喜び、JDBCドライバのベンダーがそれを修正し、あなたがドライバをアップグレードできるようになるまで待ってください。一方、JDBCドライバをwebappの /WEB-INF/lib のみであり、サーバーの /lib . もし、まだウェブアプリの /WEB-INF/lib を使用し、手動で登録と解除を行う必要があります。 ServletContextListener .

  2. Tomcat 6.0.23以前にダウングレードすると、これらの警告に悩まされることはありません。ただし、黙ってメモリリークをし続けることになります。結局のところ、それが良いことなのかどうかはわかりません。このようなメモリリークは、「Tomcat 6.0.23」以降のバージョンに移行する際の大きな原因の1つです。 OutOfMemoryError 問題 Tomcatのホットデプロイ時に発生します。

  3. JDBCドライバをTomcatの /lib フォルダを作成し、ドライバを管理するためにコネクションプールされたデータソースを用意します。Tomcatの組み込みのDBCPは、クローズ時にドライバの登録を適切に解除しないことに注意してください。バグも参照してください DBCP-322 はWONTFIXとしてクローズされています。DBCP を、DBCP よりも優れた機能を持つ他の接続プールで置き換えたいと考えています。例えば 光CP あるいは Tomcat JDBCプール .