Logbackプロファイルをこのように書くと、TPSは10倍に向上します.

6416 ワード

この記事を読むことで
  • 1.ログはファイルに出力され、LEVELレベルに従って異なるファイル
  • にログ分類が保存される.
  • 2.非同期出力ログによるディスクの削減IOによるパフォーマンスの向上
  • 3.非同期出力ログの原理
  • プロファイルlogback-spring.xml SpringBootプロジェクトはlogbackslf4jの依存を持っているので、プロファイルの作成に重点を置いて、どのような依存を導入する必要がありますか.ログ依存の衝突はすべて私たちが管理する必要はありません.logbackフレームワークは、classpathの下にlogback-springまたはlogbackと命名されたプロファイルをデフォルトでロードします.すべてのログを1つのファイルに格納するファイルサイズも、アプリケーションの実行に伴ってますます大きくなり、問題を調査することが難しくなります.正しい方法は、errorログと他のログを分離し、異なるレベルのログを期間によって記録して格納することです.
    
    
        
        
            
                [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n
            
        
        
        
            
                ERROR
                DENY
                ACCEPT
            
            
                [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n
            
    
            
            
                
                ${LOG_INFO_HOME}//%d.log
                30
            
        
        
            
                ERROR
            
            
                [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n
            
            
            
                
                ${LOG_ERROR_HOME}//%d.log
                30
            
        
    
        
            
            
            
        
    
    

    一部のラベルの説明
  • ラベル、必須ラベル、最も基本的なログ出力レベルを指定するために使用されます
  • ラベル、append
  • を追加
  • タグを使用してログの収集ポリシーを指定します.
  • name属性指定appender命名
  • classプロパティは、出力ポリシーを指定します.通常、コンソール出力とファイル出力の2つがあります.ファイル出力は、ログを永続化します.ConsoleAppenderログをコンソール
  • に出力する.
  • ラベルこのラベルを使用してフィルタポリシーを指定
  • ラベルフィルタのタイプ
  • を指定する.
  • タグ、このタグの下のタグを使用してログ出力フォーマット
  • を指定する.
  • タグは、時間ベースの収集などの収集ポリシーを指定します.
  • タグ生成ログ格納アドレス
  • を指定する.

    このような構成により、分天携帯電話のログを分類する目標が達成された.
    logback高度なプロパティ非同期出力ログ
    以前のログ構成は同期に基づいており、ログがファイルに出力されるたびにディスクIOが行われていた.今回の書き込みログにディスクIOが発生しないように非同期でログを書く方式を採用し、スレッドをブロックし、不要なパフォーマンス損失をもたらす.非同期出力ログの方式は簡単で、非同期書き込みログに基づくappenderを追加し、元の構成のappenderを指すだけでよい.
     
        
            
            0
            
            256
            
            
        
    
        
            
            0
            
            256
            
            
        

    非同期出力ログのパフォーマンステスト
    パフォーマンスが向上する以上、同期と非同期の出力ログのパフォーマンスはいったい何倍向上するのか、一度のテストで比較しなければなりません.
    サーバハードウェア
  • CPU六核
  • メモリ8 G
  • テストツールApache Jmeter
    同期出力ログ
  • スレッド数:100
  • Ramp-Up Loop(スレッド起動にかかる時間と理解できる):0
  • .
    100スレッド同時有効化と理解できます
  • 試験結果
  • 注目指標Throughput【TPS】スループット:システムが単位時間で処理する要求の数、同期出力ログでTPSが44.2/sec
    非同期出力ログ
  • スレッド数100
  • Ramp-Up Loop :0
  • 試験結果
  • TPSは497.5/secで、性能は10倍以上向上しました!!!
    非同期ログ出力の原理logbackフレームの下のLogger.info方法から追跡を開始する.一連のメソッド呼び出しパスを下図に示します.
    非同期出力ログで最も重要なのは、プロファイルのch.qos.logback.classicAsyncAppenderBaseクラスのappendメソッドをパッケージし、そのメソッドのソースコードを表示することです.
    protected void append(E eventObject) {
            if(!this.isQueueBelowDiscardingThreshold() || !this.isDiscardable(eventObject)) {
                this.preprocess(eventObject);
                this.put(eventObject);
            }
        }

    ログを破棄する必要があるかどうかをキュー状況で判断し、破棄しない場合はブロックキューに配置します.コードを表示すると、このブロックキューはArrayBlockingQueueuで、デフォルトサイズは256で、プロファイルで変更できます.Logger.info(...)からappend(...)は終了し、ログをブロックキューに押し込むだけでLogger.info(...)の次の文を実行し続けます.AsyncAppenderBaseクラスでWorkerスレッドが定義され、runメソッドのキー部分コードは次のとおりです.
    E e = parent.blockingQueue.take();
    aai.appendLoopOnAppenders(e);

    ブロックキューからログを取り出し、AppenderAttachableImplクラスのappendLoopOnAppendersメソッドを呼び出してAppendリストを維持します.Workerスレッドで呼び出されるメソッド・プロシージャは、主に次の図のようになります.
    最も主要な2つの方法はencodewriteの方法であり、前の方法はプロファイルのencodeで指定された方法に従ってバイトコードに変換され、後の方法は変換されたバイトコードをファイルに書き込む.だからファイルを書くのは新しいスレッドを通じて完成して、メインスレッドはログをブロックキューに投げて、それからまた他のことをしました.
    最終添付:プロジェクトの完全なコード