Logbackプロファイルをこのように書くと、TPSは10倍に向上します.
この記事を読むことで 1.ログはファイルに出力され、 にログ分類が保存される. 2.非同期出力ログによるディスクの削減 3.非同期出力ログの原理 プロファイルlogback-spring.xml
一部のラベルの説明 を追加
に出力する.
を指定する.
を指定する. を指定する.
このような構成により、分天携帯電話のログを分類する目標が達成された.
logback高度なプロパティ非同期出力ログ
以前のログ構成は同期に基づいており、ログがファイルに出力されるたびにディスクIOが行われていた.今回の書き込みログにディスクIOが発生しないように非同期でログを書く方式を採用し、スレッドをブロックし、不要なパフォーマンス損失をもたらす.非同期出力ログの方式は簡単で、非同期書き込みログに基づく
非同期出力ログのパフォーマンステスト
パフォーマンスが向上する以上、同期と非同期の出力ログのパフォーマンスはいったい何倍向上するのか、一度のテストで比較しなければなりません.
サーバハードウェア メモリ8 G テストツール
同期出力ログスレッド数:100 .
100スレッド同時有効化と理解できます試験結果 注目指標
非同期出力ログスレッド数100 試験結果
非同期ログ出力の原理
非同期出力ログで最も重要なのは、プロファイルの
ログを破棄する必要があるかどうかをキュー状況で判断し、破棄しない場合はブロックキューに配置します.コードを表示すると、このブロックキューは
ブロックキューからログを取り出し、
最も主要な2つの方法は
最終添付:プロジェクトの完全なコード
LEVEL
レベルに従って異なるファイルIO
によるパフォーマンスの向上SpringBoot
プロジェクトはlogback
とslf4j
の依存を持っているので、プロファイルの作成に重点を置いて、どのような依存を導入する必要がありますか.ログ依存の衝突はすべて私たちが管理する必要はありません.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
六核Apache Jmeter
同期出力ログ
Ramp-Up Loop
(スレッド起動にかかる時間と理解できる):0100スレッド同時有効化と理解できます
Throughput【TPS】
スループット:システムが単位時間で処理する要求の数、同期出力ログでTPS
が44.2/sec非同期出力ログ
Ramp-Up Loop
:0 TPS
は497.5/secで、性能は10倍以上向上しました!!!非同期ログ出力の原理
logback
フレームの下のLogger.info
方法から追跡を開始する.一連のメソッド呼び出しパスを下図に示します.非同期出力ログで最も重要なのは、プロファイルの
ch.qos.logback.classic
がAsyncAppenderBase
クラスの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つの方法は
encode
とwrite
の方法であり、前の方法はプロファイルのencode
で指定された方法に従ってバイトコードに変換され、後の方法は変換されたバイトコードをファイルに書き込む.だからファイルを書くのは新しいスレッドを通じて完成して、メインスレッドはログをブロックキューに投げて、それからまた他のことをしました.最終添付:プロジェクトの完全なコード