メモリリークを防ぐため、JDBCドライバは強制的に登録解除されました。質問する

メモリリークを防ぐため、JDBCドライバは強制的に登録解除されました。質問する

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

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

ご協力いただければ幸いです。

ベストアンサー1

バージョン6.0.24以降、Tomcatにはメモリリーク検出/WEB-INF/libこの機能により、WebアプリケーションにJDBC 4.0互換のドライバがある場合に、このような警告メッセージが表示される可能性があります。レジスターウェブアプリの起動時にServiceLoaderAPI、しかし、自動的に登録解除Web アプリケーションのシャットダウン中に Tomcat 自体がメモリ リークを防止します。このメッセージは完全に非公式であり、Tomcat はそれに応じてメモリ リーク防止アクションをすでに実行しています。

何ができるでしょうか?

  1. これらの警告は無視してください。Tomcat は正しく機能しています。実際のバグは、あなたのコードではなく、他の誰かのコード (問題の JDBC ドライバー) にあります。Tomcat が適切に機能したことを喜び、JDBC ドライバー ベンダーが修正してドライバーをアップグレードできるようになるまで待ちます。一方、JDBC ドライバーは、Web アプリケーションの にドロップすることはできず/WEB-INF/lib、サーバーの にのみドロップする必要があり/libます。Web アプリケーションの にまだ保持している場合は/WEB-INF/lib、 を使用して手動で登録および登録解除する必要がありますServletContextListener

  2. Tomcat 6.0.23 またはそれ以前のバージョンにダウングレードすれば、これらの警告に悩まされることはなくなります。しかし、メモリリークは黙って続きます。結局のところ、それが良いことなのかどうかはわかりません。このようなメモリリークは、OutOfMemoryError問題Tomcat ホットデプロイメント中。

  3. JDBC ドライバーを Tomcat の/libフォルダーに移動し、接続プールされたデータソースを使用してドライバーを管理します。Tomcat の組み込み DBCP は、終了時にドライバーを適切に登録解除しないことに注意してください。バグも参照してください。DBCP-322これはWONTFIXとしてクローズされています。DBCPを、DBCPよりも優れた機能を持つ別の接続プールに置き換えたいとします。たとえば、ひかりCP多分Tomcat JDBC プール

おすすめ記事