Tomcat のメモリ リーク: JDBC ドライバーと MySQL ステートメントのキャンセル タイマー エラーの解決
Tomcat 7.x では、ユーザーはメモリ リークの警告に遭遇することがあります。シャットダウン時の catalina.out ログ。これらの警告は、JDBC ドライバーが正しく登録解除できず、「MySQL Statement canceling Timer」という名前のスレッドがまだ実行中であることを示します。
JDBC ドライバー登録解除エラー
構成にもかかわらずDataSource の destroy-method を削除した場合、エラー メッセージは、JDBC ドライバー (com.mysql.jdbc.Driver) が Web アプリケーションによって登録解除されていないことを示唆しています。エラー メッセージに記載されているように、Tomcat はメモリ リークを防ぐためにドライバの登録を強制的に解除します。
この問題を防ぐには、MySQL JDBC コネクタ/ドライバを tomcat/lib フォルダに移動する代わりに、tomcat/lib フォルダに移動することをお勧めします。それは戦争中です。これにより、コネクタ/ドライバーが Tomcat クラスローダーによって 1 回だけロードされるようになり、複数のインスタンス化が回避され、シャットダウン時に適切なクリーンアップが保証されます。
MySQL ステートメント キャンセル タイマー スレッド エラー
「MySQL ステートメント キャンセル タイマー」スレッドは、接続が閉じられたときに未処理のステートメントをキャンセルするために JDBC ドライバーによって作成されます。このスレッドが適切に停止しないと、メモリ リークが発生する可能性があります。
この問題を解決するには、Web アプリケーションを停止する前に JDBC 接続が適切に閉じられていることを確認してください。これは、finally ブロックを使用するか、try-with-resources ステートメントを使用することによって実現できます。
追加の考慮事項
以上がTomcat で JDBC ドライバーと MySQL ステートメント キャンセル タイマーを使用するとメモリ リークが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。