1

しばらくの間、これに関する答えを探しています。私が働いている会社には高度な並行システムがありますが、最近、Web サーバー (Jboss) のロギング構成にコンソール アペンダーが含まれていることがわかりました。アプリケーション ロガーもコンソールに送信されます。ロギング アクションでデッドロックが発生し始めました。そのほとんどはコンソール アペンダーです (Log4j には非常に厄介なシンクロナイゼーション バグがあることは知っていますが、関連するコードにシンクロナイゼーション メソッドがないことはほぼ確実です)。もう 1 つわかったことは、IT 担当者が定期的にパテ コンソールを使用してコンソールにアクセスし、一時停止してログを確認し、パテ ウィンドウを閉じることです。

コンソール アペンダー、および運用環境でのログ記録と監視にコンソールを使用すると、システムでデッドロックや競合状態が発生する可能性はありますか? 私の理解では、コンソールは IDE を使用した開発フェーズでのみ使用する必要があります。これは、並行性の高いシステムでは、競合状態の影響を受ける別のリソース (バッファリングされていない I/O のために低速) を取得するためです。

ありがとう。

4

1 に答える 1

3

JBoss Enterprise Application Platform 5 のパフォーマンス チューニングのベスト プラクティス、 9 ページから

本番環境でコンソール ロギングをオフにする

ログの冗長性を下げる

非同期ロギングを使用します。

デバッグ ログ ステートメントを If(debugEnabled()) でラップする

ログに記録する前に何をログに記録するかを計算する Log4J のバグがあるため、本番環境での最初と最後の考慮事項を強くお勧めしMyClass#toString()ますString。これをログに記録する必要があるかどうかを確認してくださいString(かなり悪いです、実際に =)。

lessまた、ファイルをブロックしないように、ログ ファイルをチェックするときにコマンドを使用するよう IT 担当者に伝えます。コンソールを直接チェックしないでください =. このコマンドは Linux で機能します。サーバーが Unix 環境にある場合、コマンドはtail(@Toni のコメントに基づいて) になります。


IMO、公式の JBoss パフォーマンス ガイドは、本番環境でのコンソール ログの使用をやめる最良の証拠だと思います (これでデッドロックの問題が証明されなくても)。

于 2013-02-19T04:53:03.503 に答える