0811★2335★南京魏電気█188███████選択エッグIVFの代理出産███████チューブパッケージ性別男の子に生まれた少年████████代理出産代理出産のパッケージのために選択したセックスチューブセックス代理はIVF代理出産男の子を█████選択████████生まれ
非常に同時1.アプリケーションは、アクセスログを印刷することを選択したのでしょうか?
2.分散アプリケーションでは、ログの中心部にすべてのログを印刷することを選択したかどうか?
ソリューション:
パフォーマンスログを印刷しない場合は、1に選択した場合、それは理解しやすいです。何かが間違って速い調査を行くときしかし、あなたは慎重かどうかを行うことができる考慮する必要がありますか?
2.あなたは、各マシン上で配信ログは非常に便利だと思いますか、それは、ロギング・センターなしで行くこともOKです!
それでもアクセスログを大量に印刷することを選択した場合は、ログ・センターにログを印刷することを選択した場合や、あなたに便利な、この記事!
彼らは、ロギング・センターを達成した場合、その難しいことではない、またはそのような容量の大きさとしては、そのようなパフォーマンスなど、あまりにも多くの努力を過ごすために!
そこで、我々は、ログとしてアリクラウドloghubセンターを選択し、すべてのログを収集します!
通常の動作をloghub:
本件を提示する前に、我々はloghub独自の方法、および問題を見ています!
公式文書にアクセスし、我々がlogProducerアクセスを使用することをお勧めします。
実際、logProducerは、このようなログがように非同期的に送信して、統一を送る前に、データパケットの一定数に達したときのように、たくさんの最適化を行っています!
この記事は存在し続ける理由としては、それは、これらの最適化が十分でなかったため、例えば、まだCPUの多くを占めるだろう、まだメモリの制限の対象となり、依然業績に影響を与えるこれらのログを送信します。。。
まあ、アクセス方法:
1. Mavenの依存関係が導入されています。
<依存性> <のgroupId> com.aliyun.openservices </のgroupId> <たartifactId> aliyun-ログlogback-アペンダ</たartifactId> <バージョン> 0.1.13 </バージョン> </依存>
2. logbackアペンダを追加しました:
<アペンダ名= "LOGHUB-アペンダ"クラス= "アペンダ:com.aliyun.openservices.log.logback.LoghubAppender"> <エンドポイント> $ {loghub.endpoint} </エンドポイント> <accessKeyId> $ {loghub.accessKeyId} < / accessKeyId> <アクセスキー> $ {loghub.accessKey} </アクセスキー> <プロジェクト> $ {loghub.projectName} </プロジェクト名> <logstore>テストlogstore </ logstore> <トピック> $ {loghub.topic} </トピック> <packageTimeoutInMS> 1500 </ packageTimeoutInMS> <logsCountPerPackage> 4096 </ logsCountPerPackage> <! - 4718592 = 4M、3145728 = 3M、2097152 = 2M - > <logsBytesPerPackage> 3145728 </ logsBytesPerPackage> <! - 17179869184 = 2G(溢出丢弃)、104857600 = 12.5M、2147483647 = 2G、536870912 = 512M - > <memPoolSizeInByte> 536870912 </ memPoolSizeInByte> <retryTimes> 1 </ retryTimes> <maxIOThreadSizeInPool> 6 </ maxIOThreadSizeInPool > <フィルタクラス= "ch.qos.logback.classic.filter.ThresholdFilter"> <レベル>情報</レベル> </フィルタ> </アペンダ> <ルートレベル= "$ {logging.level}"> <アペンダ-REF REF = "STDOUT" /> <アペンダ-REF REF = "LOGHUB-アペンダ" /> </ルート>
コード3.印刷ログ:
プライベート静的ロガーロガー= LoggerFactory.getLogger(MyClass.class)。 logger.warn( "私に5を与える:{}"、名前)。
一見、効率的なアクセスの問題:
伝送ネットワークが遅い場合はいはい、しかし、メモリの蓄積が多いであろう。1. loghub非同期ログを送信する;
2.蓄積は、上述のように積層されたメモリが一定の限界に達したときに、それは大きなされず、構成され、恐れていません。彼はそれを行う方法は?実際には、ロックを通じて、すべての後続の要求はすべてブロックされ、これらすべての恐ろしい考え、
私たちはよく、いくつかの遅い送信スレッドを開くことができます3.ネットワークは、はい、これはある程度の配信の問題を緩和するが、基本的なますまた、それはほかに、ログがもっとひどいことになるスレッドオープン、マルチスレッドのスケジューリング後に送信され、助けにはならないが、これはああただ単にオプション機能です。
これらの問題を解決するために、私たちは何ができるのでしょうか?
1.早期にやったことをやって、これはナンセンスまあではない、不要なログのプリントを削除します!
2.ネットワークは、ロギング、印刷を減らす、遅い場合、それは少しこじつけですが、あなたは試すことができます!
3.直接は根本的に問題を解決するためにログを受信し、送信するために、非同期スレッドを使用します!
4.ログを多数行う方法を積み重ねたときに、その後、送信するために、非同期スレッドを使用する場合は?
5.ローカルファイルストレージを送る迅速、円滑なネットワークまで、ログの多数の蓄積の問題を解決するためにログを送信する必要があります使用してください!
アカウントにログインし、多数のローカルディスクストレージの蓄積を使用して、ログを送信するために、非同期スレッドを使用することを考えると、基本的な問題は解決されている必要があります!
しかし、どのようにそれを行うには?
どのように非同期?
ディスクを保存するには?
これらは、非常に現実的な問題です!
あなたがここに表示された場合、学生は却下することができ、非常に低いと感じました!
私たちは具体的な実施形態を見てみましょう:
1.どのように非同期?
想像することができ、基本的には、その後、別のコンシューマスレッドの消費量を開いて、ログの書き込み要求を受信するためにキューを使用することですすることができます!
しかし、そう問題は何ですか?外部からの要求へのアクセスが来るので、スレッドセーフなキューが正しかった、同時です!同期では?キューをブロックすることにより?
要するに、アプリケーションの同時実行ヒットをもたらすシリアル問題と平行に、あるだろうと思われます!
そこで、我々は、このロックの役割を縮小する必要があります。我々は、サブロックと同様に、この問題を解決するために複数のキューを使用することができます!同時容量が十分でない場合は、ロックの数を増やすことができます!
彼は、それはまだ非常に抽象的、既製のコード行で、行くと言います!
1.元logProducerアペンダのカバーを、非同期の問題を解決するために、主に、独自のアペンダ実装を使用して:
<アペンダ名= "LOGHUB-アペンダ"クラス= "com.test.AsyncLoghubAppender"> <エンドポイント> $ {loghub.endpoint} </エンドポイント> <accessKeyId> $ {loghub.accessKeyId} </ accessKeyId> <アクセスキー> $ { loghub.accessKey} </アクセスキー> <プロジェクト> $ {loghub.projectName} </プロジェクト名> <logstore>アポロアラーム</ logstore> <トピック> $ {loghub.topic} </トピック> <packageTimeoutInMS> 1500 </ packageTimeoutInMS> <logsCountPerPackage> 4096 </ logsCountPerPackage> <! - 4718592 = 4M、3145728 = 3M、2097152 = 2M - > <logsBytesPerPackage> 3145728 </ logsBytesPerPackage> <! - 17179869184 = 2G(オーバーフローを廃棄)、104857600 = 12.5M、2147483647 = 2G、536870912 = 512M - > <memPoolSizeInByte> 536870912 </ memPoolSizeInByte> <retryTimes> 1 </ retryTimes> <maxIOThreadSizeInPool> 6 </ maxIOThreadSizeInPool> <フィルタクラス= "ch.qos.logback.classic.filter.ThresholdFilter"> <レベル>情報</レベル> </フィルタ> </アペンダ>