みなさん、良い一日を。
次の問題を解決できません:
アプリケーションにはWebSphereアプリサーバーを使用し、ログファイルの管理には「ログバック」ログフレームワークを使用しています。
エブリシングは正常に機能しているように見えましたが、最近、ファイルローリングの許容できない動作が検出されました。WebSphereでのアプリケーションの最初の開始では、ログファイルのローリング(サイズ別および日別)は正常に機能しますが、アプリケーションを停止すると、現在のログファイルはjava.exe(IBM WAS)プロセスによってロックされ、アプリケーションを最初からやり直すと、以前のロックのため、ローリングログは機能しません。Unlockerを介してファイルを調べたとき、私は驚きました-現在のファイルをロックする2つのプロセスがありました。また、アプリを停止して再起動すると、現在のログファイルをロックするjava.exeが3つありますが、タスクマネージャーでは1つのプロセスしか実行されていません。このような「テスト」中にOutOfMemoryエラーが発生することがあります。
そのため、最後に非常に大きなログファイルがあります。(20GB以上)
私はいくつかの同様の問題を見つけましたが、log4jローリングに問題があります。そして、それがなぜそうだったのかについての説明はありません-ただ1つがそうでした-log4jはwebsphereには推奨されません。
そして、「ロガー」ではまったく問題がないようです。それで、2つの質問に答えることができる人はいますか?
アプリケーションがすでに停止しているのに、WebSphereがファイルをロックして解放しないのはなぜですか?
アプリケーションが正しい方法で停止されたときに(Unlocker、Task Managerなどのチートを使用せずに)ログファイルのロックを解除する(またはWebSphereにロックしないように指示する)方法は?
ご清聴ありがとうございました...どんな助けもいただければ幸いです。
更新1:
最近、私はログバック付きの小さなWebアプリを使おうとしましたが、繰り返しロックすることなく、うまく機能します。
また、大きなアプリケーションが停止したときにログを調べたところ、これが見つかりました(アプリケーションの停止中のログ内の唯一の文字列)
27-03 05:59:39 [WebContainer : 7] INFO o.hibernate.impl.SessionFactoryImpl:close - closing
閉じているが閉じていない?私は正しい方法で考えることを願っています...
----UPD 3
うーん...私はWebsphereにカスタムWARをデプロイするのに多くの時間を費やしましたが、それでも、WASがログファイルをロックする場合とロックしない場合がある理由を見つけることができません。
信じられない、同じトラブルに直面した人がいないことに驚いています