Web アプリケーションを実行すると、このメッセージが表示されます。正常に実行されますが、シャットダウン中にこのメッセージが表示されます。
重大: Web アプリケーションは JBDC ドライバ [oracle.jdbc.driver.OracleDriver] を登録しましたが、Web アプリケーションの停止時に登録解除できませんでした。メモリ リークを防ぐため、JDBC ドライバは強制的に登録解除されました。
ご協力いただければ幸いです。
ベストアンサー1
バージョン6.0.24以降、Tomcatにはメモリリーク検出/WEB-INF/lib
この機能により、WebアプリケーションにJDBC 4.0互換のドライバがある場合に、このような警告メッセージが表示される可能性があります。レジスターウェブアプリの起動時にServiceLoader
API、しかし、自動的に登録解除Web アプリケーションのシャットダウン中に Tomcat 自体がメモリ リークを防止します。このメッセージは完全に非公式であり、Tomcat はそれに応じてメモリ リーク防止アクションをすでに実行しています。
何ができるでしょうか?
これらの警告は無視してください。Tomcat は正しく機能しています。実際のバグは、あなたのコードではなく、他の誰かのコード (問題の JDBC ドライバー) にあります。Tomcat が適切に機能したことを喜び、JDBC ドライバー ベンダーが修正してドライバーをアップグレードできるようになるまで待ちます。一方、JDBC ドライバーは、Web アプリケーションの にドロップすることはできず
/WEB-INF/lib
、サーバーの にのみドロップする必要があり/lib
ます。Web アプリケーションの にまだ保持している場合は/WEB-INF/lib
、 を使用して手動で登録および登録解除する必要がありますServletContextListener
。Tomcat 6.0.23 またはそれ以前のバージョンにダウングレードすれば、これらの警告に悩まされることはなくなります。しかし、メモリリークは黙って続きます。結局のところ、それが良いことなのかどうかはわかりません。このようなメモリリークは、
OutOfMemoryError
問題Tomcat ホットデプロイメント中。JDBC ドライバーを Tomcat の
/lib
フォルダーに移動し、接続プールされたデータソースを使用してドライバーを管理します。Tomcat の組み込み DBCP は、終了時にドライバーを適切に登録解除しないことに注意してください。バグも参照してください。DBCP-322これはWONTFIXとしてクローズされています。DBCPを、DBCPよりも優れた機能を持つ別の接続プールに置き換えたいとします。たとえば、ひかりCP多分Tomcat JDBC プール。