0

スループットを向上させ、待ち時間を短縮するために Log4J 構成を最適化することを検討しており、最適な設定を決定しようとしています。私は、コードにバグがなく、信頼性が高く、重要度の高いものから重要度の低いものへとシステム パフォーマンスが最優先されるシステムを扱っています。

最高のパフォーマンスという点で非同期ロガーが勝者であることは明らかであり、それは完全に理にかなっています。Random Access File Appender と Buffered File Appender のトレードオフがわかりません。ここで log4j の Web サイトを見ましたが、Random Access File Appender を使用することの実際の欠点は見当たりませんでした。

誰かが違いを説明し、それぞれをいつ使用すべきかを説明してもらえますか?

4

2 に答える 2

2

興味がある点:

  • RandomAccessFileAppenders は常にバッファリングされます。beta-9 の時点で、バッファー サイズは 256 * 1024 バイトであり、構成できません。これは、次のリリースで構成可能になります。
  • FileAppenders は、bufferedIO属性をバッファリングするかどうかで構成できます。beta-9 の時点で、バッファー サイズは 8 * 1024 バイトであり、構成できません。これは、次のリリースで構成可能になります。

  • 内部では、FileAppenders は BufferedOutputStream にラップされた java.io.FileOutputStream を使用します。flush()RandomAccessFileAppenders は、バッファがいっぱいになるか呼び出されると、RandomAccessFile の末尾に追加される ByteBuffer に書き込みます。(パフォーマンスを除いて) 大きな違いはないはずですが、FileAppenders にはより長い実績があり、まだ発見されていない新しい RandomAccessFileAppenders にはまだ問題がある可能性があります。ロールオーバーはどちらのタイプのアペンダーでも問題なく機能するようですが、チームがまだ把握していない特殊なケースが存在する可能性があります。(ただし、Log4J2 は活発に開発されており、問題は迅速に解決されます。)

  • immediateFlushRandomAccessFileAppenders と FileAppenders の両方を、すべてのログ イベントをディスクにフラッシュする属性で構成できます。AsyncAppenders または AsyncLoggers を使用するときはスイッチをオフにすることをお勧めします。immediateFlushこれにより、それらが提供する優れたバッチ動作を活用できます。非同期アペンダーとロガーは、複数のイベントをログに記録した後にフラッシュでき、キューが再び空になったときに確実に 1 回フラッシュします。これは非常に効率的で、同時に、すべてのログ イベントが常にディスクに永続化されるようにします。

于 2013-10-16T04:54:59.123 に答える
1

ランダムアクセスは、バッファリングなしでファイルに直接書き込みます。これは低速ですが、バッファリングされた書き込みよりも信頼性が高く、クラッシュ時にバッファリングされた書き込みがいくつかのフラッシュされていない書き込みを失う可能性があります。どちらがあなたにとってより重要かを決める必要があります。あなたの3つのリストからは明らかではありません。

編集呼び出されたクラスRandomAccessAppenderがランダムアクセスを使用すると予想される場合がありますが、これはバッファリングがないことを意味しますが、明らかにそうではありません!

于 2013-10-14T22:58:11.280 に答える