2016-10-06 44 views
0

このメモリリークの問題を解決するには、log4j v1.Howのメモリリークの問題に直面しています。 このメソッドは定期的に自分のクラスのlog4j.propertiesファイルの更新をチェックします。log4jスレッドのTomcatメモリリークの問題

PropertyConfigutor.configureAndWatch(time_ms);

シャットダウン時に、tomcatのメモリリークの問題が発生します。ログは以下の通りです:

06 - 10月 - 2016年15:13:55.973 WARNING [localhostを-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads は、Webアプリケーションは、[myappに]持っているように見えます [Thread-10]というスレッドを開始しましたが、停止に失敗しました。これは、メモリリーク を作成する可能性が非常に高いです。

java.lang.Thread.sleep(ネイティブメソッド) org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:103)

事前に感謝

:スレッドのスタックトレース

答えて

1

設定ファイルが変更された場合、自動的にlog4jを再ロードする方法はありますか?

はい。 DOMConfiguratorとPropertyConfiguratorはどちらも、configureAndWatchメソッドによる自動再読み込みをサポートしています。詳細については、APIドキュメントを参照してください。

configureAndWatchは別のwathdogスレッドを起動するため、log4j 1.2でこのスレッドを停止する方法がないため、configureAndWatchメソッドは、アプリケーションがリサイクルされるJ2EE環境では安全ではありません。(1)

2番目のステートメントは、Tomcatのような本格的なアプリケーションサーバーでも当てはまります。

実行時に構成を再ロードする場合は、log4j 2に更新することをお勧めします。

独自のプロパティファイルリーダーを作成し、ログ設定をプログラムで設定することもできます。詳細はChange Log4j properties at runtimeを参照してください。