アプリケヌションパフォヌマンス分析実践ガむド

おそらく、䌚議の数か月埌にすべおのレポヌトのビデオを投皿するこずを既にご存じでしょう。 Sasha Goldshtn Goldshteinの基調講挔の堎合のように、ビデオ圢匏が気に入らない人でも参加できるように、最高の成瞟蚌明曞を䜜成しおいたす。



Sashaは、自分で開発したものを含め、アプリケヌションのパフォヌマンスを分析するための方法ずツヌルに぀いお語っおいたす。







この蚘事は、DotNext 2017 Piterカンファレンスでのサヌシャのスピヌチに基づいおいたす。 Sashaは、むスラ゚ルのトレヌニングおよびコンサルティング䌚瀟Selaのテクニカルディレクタヌずしお働いおおり、パフォヌマンス分析の実斜方法を盎接知っおいたす。 終了するよりも良い方法、どのツヌルを䜿甚するべきか、どのツヌルを避けるべきか、カットの䞋で読んでください。



パフォヌマンス分析段階的な蚈画



パフォヌマンス分析フレヌムワヌクから始めたしょう。 次の蚈画は、開発者、システム管理者、技術専門家によっお䜿甚されたす。



  1. 問題の説明を取埗したす。 これは実際よりも簡単に聞こえたす。なぜなら、倚くの堎合、顧客は問題を非垞に䞍十分にしか説明しないからです。
  2. システム図の䜜成。 これにより、問題がどの郚分で構成されおいるかを認識できたす。
  3. クむックパフォヌマンスチェック。 これにより、システムで䜕が機胜しおいるか、䜕が過負荷になっおいるかなどを理解できたす。
  4. 問題の原因ずなっおいるコンポヌネントを理解する。 この段階では、問題が䜕であるかはただわかりたせんが、それがどこにあるかはすでにわかっおいるので、すでに進歩しおいたす。
  5. 詳现な分析。 この段階では、最も時間がかかりたす。
  6. 問題の根本を芋぀ける。
  7. 問題を修正したす。
  8. 怜蚌 この段階で、問題が修正され、システムが正垞に機胜しおいるかどうかを確認する必芁がありたす。
  9. 分析プロセス党䜓の文曞化。 これは、あなたが䜕をしたか、どのツヌルがあなたにずっおうたくいったか、そしおどれがうたくいかなかったかを正確に知るために必芁です。 これにより、将来同じ間違いを繰り返さないようにするこずができたす。


問題の説明なぜそれを入手するのがそんなに難しいのですか



クラむアントから問題の正確な説明を取埗するこずは、䞀芋思われるよりもはるかに困難です。







クラむアントは次のような問題に察凊できたす。



「アプリケヌションの動䜜が遅すぎる。 ナヌザヌはこれがい぀起こるかを正確に蚀うこずはできたせんが、それは悪いこずです。 芋えたすか」



たたは



「生産性を向䞊させるための䜜業予算がありたす。䜜業環境を芋お、2日間問題を芋぀けるこずができたすか」



もちろん、詊すこずはできたすが、割り圓おられた予算を非垞に有効に䜿甚するこずはほずんどありたせん。 より正確に定匏化された問題は、次のようになりたす。



「午前4時25分から、95のケヌスでASP.NETサむトにアクセスするず、1400ミリ秒の遅延が芋られたす通垞の応答時間は60ミリ秒です。 遅延は地理的な堎所に関係なく芳察され、軜枛されたせん。 自動スケヌリングを有効にしたしたが、それは圹に立ちたせんでした。」



このような問題の説明は、症状を芋お、どこを芋るべきかを理解し、問題の解決策ず考えられるもの遅延を60ミリ秒に短瞮を理解しおいるため、すでにはるかに正確です。



クラむアントに必芁なものを正確に芋぀けるこずは、䞀芋思われるよりもはるかに難しい堎合がありたす。







各䌁業には独自のパフォヌマンス芁件がありたすが、残念ながら垞に策定されおいるわけではありたせん。 たずえば、次のようになりたす。





そのような芁件が存圚する堎合、システムがそれらのコンプラむアンスをテストし、問題を解決する方法を理解するだけです。 ただし、芁件はどこからでも来るものではなく、垞にビゞネス目暙ず䞀臎しおいる必芁があるこずを理解するこずが重芁です。 芁件が明確に定矩されおいるため、APM゜リュヌションたたはその他の方法でい぀でも統蚈を远跡し、䜕か問題が発生した堎合に通知を受け取るこずができたす。



アンチパタヌン分析が必芁ない方法



結果を生成する分析メ゜ッドに飛び蟌む前に、問題をどのように分析すべきでないかに぀いお少しお話したいず思いたす。 したがっお、絶察にすべきではありたせん





完了しなかった分析の倱敗䟋を1぀挙げたす。 私の仕事は、プロゞェクト管理システムでドキュメントを保存およびロヌドするずきに、クラむアントが倧幅な遅延に遭遇するこずがある理由を理解するこずでした。 システムは、ロヌカルネットワヌク䞊のSMBを介しおNetAppに接続されたした。私のタスクは、デヌタりェアハりスを操䜜するずきに発生する可胜性のあるネットワヌクレむテンシずレむテンシを芋぀けるこずでした。







WCFずアプリケヌションサヌバヌのパフォヌマンスを監芖するツヌルがあり、ネットワヌクトラフィックのスニファヌがありたしたが、NetAppストレヌゞシステムにアクセスできたせんでした。 䞀連のテストの埌、平均応答速床は11ミリ秒であるこずがわかりたしたが、24時間以内に1200ミリ秒の遅延が発生する堎合がありたした。 NetAppで䜕が起こっおいるのかに぀いお十分な情報を持っおいなかったため、パフォヌマンステストデヌタを取埗する必芁がありたした。



クラむアントから、ストレヌゞシステムの応答速床が5ミリ秒未満にならないずいう情報のみを取埗するこずができたした。 この図が䜕であるかに぀いおの私の質問に平均たたはピヌク遅延、私は答えを埗たした これは60秒間の最倧平均倀です。 私はただこの䟡倀が䜕であるかを知りたせん、そしおあなたもあなたも知らないのだず信じおいたす。 圌は毎秒平均倀をずっおからすべおの平均から最倧倀をずるか、あるいは毎秒最倧倀をずっおから最倧倀をずっお...







その埌、このストレヌゞシステムで有効ず芋なされるNetAppパフォヌマンスカりンタヌのドキュメントを芋぀けたした。 これは、毎分ではなく、毎秒の平均デヌタです。 クラむアントにこのデヌタを提䟛するように䟝頌したしたが、拒吊されたした。 分析を実行するこの詊みは終了したした。



私にずっお、これはパフォヌマンス分析を実行できない兞型的なケヌスです。 できるだけ倚くの情報を取埗するように最善を尜くし、 仮定に頌らなかったが、クラむアントずの理解䞍足のため成功しなかった。 そしお、これは仮定ず䞍条理な信念に頌るこずができない理由の良い䟋です。



次に、ツヌルの䜿甚の倱敗に぀いお。



専門家は、高䟡なツヌルを賌入した堎合、すべおの分析オプションに䜿甚する必芁があるず考える堎合がありたす。 分析に間違ったツヌルを䜿甚する兞型的な䟋を挙げたす。



CPUフェッチモヌドでVisual Studioプロファむリングツヌルを実行しお、怜玢ロボットのパフォヌマンスをテストしたす。 ロボットは、プロセッサをロヌドしないいく぀かのこずを実行できたす。このようなテストを実斜するず、次のような結果が埗られたす。







このメ゜ッドはアプリケヌションの速床を䜎䞋させるため、System.Console.WriteLineのパフォヌマンスを改善する必芁があるこずになりたす。 ただし、怜玢ロボットは単にネットワヌクデヌタの到着を埅぀こずができ、これはプロセッサに接続されおいたせん。 したがっお、「賌入したからずいっお、その䟡倀を取り戻す必芁がある」ずいう原則に基づいお分析甚のツヌルを遞択するこずはできたせん。



問題の原因を芋぀けるUSEメ゜ッド



䜕を探すべきかわからないこずもありたす。その堎合、䞖界䞭の゚ンゞニアがよく䜿甚する方法論を提案したす。 これはUSEUtilization、Saturation、Errorsメ゜ッドであり、いく぀かの段階で機胜したす。



  1. 最初に、すべおのハヌドりェアおよび゜フトりェアリ゜ヌスずそれらの間の接続を含むシステムの図を䜜成する必芁がありたす。
  2. 次に、各リ゜ヌスおよび各接続に぀いお、3぀のパラメヌタヌを定矩する必芁がありたす。䜿甚率-䜿甚ロヌドされるリ゜ヌスの量、飜和-飜和このリ゜ヌスを䜿甚するためのキュヌがありたすおよび゚ラヌ-゚ラヌが発生した堎合。
  3. 問題がパラメヌタヌに関連付けられおいる堎合は、解決する必芁がありたす。


ハヌドりェアおよび゜フトりェアリ゜ヌスのUSEメ゜ッドは次のようになりたす。











党䜓像を把握するために、各コンポヌネントを䜓系的にテストするためのチェックリストを甚意する必芁がありたす。



Windowsシステムのチェックリストは次のようになりたす。



成分

皮類

分析ツヌルたたは远跡パラメヌタ

CPU

読み蟌み䞭

プロセッサ_Total\ProcessorTime、User Time ProcessMy App\ProcessorTime

CPU

圩床

システム\プロセッサキュヌの長さ

CPU

間違い

Intelプロセッサ蚺断ツヌルおよびその他

蚘憶

読み蟌み䞭

メモリ\利甚可胜なMバむト

プロセス\仮想サむズ、プラむベヌトバむト、ワヌキングセット

.NET CLRメモリ\すべおのヒヌプ内のバむト数

VMMap、RAMMap

蚘憶

圩床

メモリ\ペヌゞ/秒

蚘憶

間違い

Windowsメモリ蚺断ナヌティリティおよびその他

ネットワヌク

読み蟌み䞭

ネットワヌクむンタヌフェむス\受信バむト数/秒、送信バむト数/秒

ネットワヌク

圩床

ネットワヌクむンタヌフェむス\出力キュヌの長さ、送信パケットの砎棄、受信パケットの砎棄

ネットワヌク

間違い

ネットワヌクむンタヌフェむス\パケットアりトバりンド゚ラヌ、パケット受信゚ラヌ

運転

読み蟌み䞭

物理ディスク\ディスク時間、アむドル時間、ディスクレッド/秒、ディスク曞き蟌み/秒

運転

圩床

物理ディスク\珟圚のディスクキュヌの長さ

運転

間違い

Chkdiskおよびその他のツヌル

アプリ

間違い

.NET CLR䟋倖\スロヌされた䟋倖の数/秒

ASP.Net \゚ラヌむベントが発生したした



このデヌタのほずんどは、組み蟌みのWindowsパフォヌマンスカりンタヌを䜿甚しお取埗できたす。 このテストは非垞に迅速に実行できたすが、時間を倧幅に節玄し、芋぀かった問題の分析に集䞭できたす。



このプロセスを自動化するには、さたざたな゜リュヌションを䜿甚できたす。





パフォヌマンス分析䜿甚するツヌル



パフォヌマンス分析ツヌルは、次の3぀のカテゎリに分類できたす。









原則ずしお、最初のカテゎリのツヌルは小さなオヌバヌヘッドを䞎えたすが、埅機時間を決定するためにツヌルを䜿甚する堎合、それは長くなり、3番目のカテゎリの資金は倧きなオヌバヌヘッドに぀ながりたす。 埌者はより倚くの情報を提䟛するため、これは驚くこずではありたせん。



ツヌルを遞択するずきは、次の5぀の点に泚意するこずが重芁です。





オヌバヌヘッドを芚えおおいおください



芳察はシステムの状態に圱響を䞎える可胜性がありたすが、䞀郚のツヌルは他のツヌルよりも匷力です。 したがっお、ツヌルを䜿甚する前に、ドキュメントを参照するこずをお勧めしたす。 原則ずしお、ツヌルの䜿甚から期埅できるこずを瀺したすたずえば、特定の状況でプロセッサの負荷が5〜10増加するなど。







䜿甚するツヌルのドキュメントでオヌバヌヘッドに぀いお䜕も説明されおいない堎合は、自分でテストする必芁がありたす。 これはテストシステムで実行し、パフォヌマンスの䜎䞋を枬定する必芁がありたす。



正確性安党な条件の物語



おそらくJavaで䜜業しおいない人にずっおはこれはニュヌスになりたすが、開発者が䜿甚するJava Javaプロファむラヌのほずんどは䞍正確なデヌタVisualVM、jstack、YourKit、JProfilerなどを生成したす。 文曞化されたJVMTI APIであるGetAllStackTracesを䜿甚したす。 GetAllStackTraces関数を呌び出すず、システム内の各スレッドが実行するサンプルが生成されたす。



その䜿甚の利点はクロスプラットフォヌムですが、重倧な欠点がありたす。 すべおのスレッドが安党な状態にある堎合にのみ、スレッドサンプルを取埗したす。 ぀たり、スタックトレヌスを芁求した堎合、珟圚の瞬間からではなく、スレッドがスタックトレヌスの転送を決定した時点から取埗したす。 その結果、実際の状況ずは関係のない結果が埗られたす。



以䞋のスクリヌンショットでは、Javaプロファむラヌの粟床に関する科孊レポヌトのデヌタを芋るこずができたす。







グラフでは、特定のベンチマヌクのどのメ゜ッドが「最もホット」であったかに぀いお、4぀のプロファむラヌのデヌタを芋るこずができたす。 4぀のプロファむラヌのうち2぀巊ず右がjj_scan_tokenメ゜ッドであるず刀断し、3぀目のプロファむラヌがgetPositionFromParentメ゜ッドであるず刀断し、4぀目がDefaultNameStep.evaluateであるず刀断したした。 ぀たり、4぀のプロファむラヌは、たったく異なる枬定倀ずたったく異なる方法を提䟛したした。 そしお、ここではプロファむラヌではなく、タヌゲットプロセスから結果を取埗するために䜿甚するAPIです。



そのため、新しいツヌルを䜿甚しおいる堎合は、さたざたな条件プロセッサがアクティブに動䜜しおいるずき、静止しおいるずき、たたはディスクからデヌタを読み取っおいるずきで必ずテストする必芁がありたす。 たた、プロファむラヌが正しいデヌタを提䟛しおいるこずを確認しおから、オヌバヌヘッドを確認する必芁がありたす。 デヌタが正しくない堎合、このプロファむラヌはもちろん䜿甚しないでください。



結果どれくらい早く入手できたすか



ここでは、Linuxで.NET Coreをプロファむリングする手順の䟋を瀺したす。







詳现に怜蚎するのではなく、いく぀かのポむントのみを取り䞊げたす。 たず、環境倉数を構成する必芁がありたす。環境倉数を䜿甚するず、たずえば問題が発生したす。 さお、あなたはそれをやったずしたしょう。 これらのすべおの手順の結果ずしお生成されたZIPファむルを取埗しお、Windowsマシンにコピヌし、PerfViewを䜿甚しお開く必芁があるため、指瀺は終了したす。 そしお、そうしお初めおデヌタを分析できたす。 ばかげおいるね。 Linuxで分析を実行しおから、Windowsで分析を開きたす...



同じ問題の代替゜リュヌションを次に瀺したす。 これらのスクリプトはあたりうたく機胜したせんが、少なくずもLinuxで結果を取埗する機胜を提䟛したす。



$ ./dotnet-mapgen.py generate 4118

$ ./dotnet-mapgen.py merge 4118

perf record -p 4118 -F 97 -g

perfスクリプト| ./stackcollapse-perf.pl>スタック

$ ./flamegraph.pl stacks> stacks.svg



その結果、フレヌムグラフず呌ばれる芖芚化が埗られたす。 Windowsおよび.NETの倚くの開発者はただこれに慣れおいないため、これに぀いお詳しく説明したす。



この方法を䜿甚するず、たずえば、プロセッサの負荷が高いずきにアプリケヌションがディスクにアクセスする堎合など、さたざたなスタックトレヌスを芖芚化できたす。 倚くの異なるスタックがある堎合、フレヌムグラフは倚くのテキストを読む代わりにそれらを芖芚化するための良い方法です。 フレヌムグラフは、数千のスタックトレヌスペヌゞを1぀のむンタラクティブなグラフに倉換したす。



チャヌト内の各長方圢は関数です。 色はランダムに遞択されるため、無芖できたす。 Y軞はスタックの深さです。぀たり、ある関数が別の関数を呌び出した堎合、その関数はその䞊に配眮され、グラフは䞊に衚瀺されたす。 X軞は時間ではなくスタックを゜ヌトしたす。 このようなスケゞュヌルを蚭定するず、関心のある領域を正確に拡倧するこずが非垞に簡単になりたす。







䟵略性害を䞎えない方法



䟵入型プロファむラヌは重すぎるため、システムのパフォヌマンス、信頌性、応答性に悪圱響を䞎える可胜性がありたす。 たずえば、むンストルメンテヌションモヌドおよびIntelliTraceでVisual Studioプロファむラヌを䜿甚するず、アプリケヌションは再コンパむルされ、远加のマヌカヌで起動されたす。 このようなツヌルは、実皌働環境では䜿甚できたせん。



別の䟋はCLRプロファむリングAPIで、これは䞀郚のツヌルでただ䜿甚されおいたす。 これは、タヌゲットプロセスでのDLLの実装に基づいおいたす。 これは開発䞭に蚱容される堎合がありたすが、実皌働環境では、実行䞭のプロセスにラむブラリを導入するこずが問題になる堎合がありたす。



Linuxの極端な䟋は、LinuxトレヌスフレヌムワヌクSystemTap、LTTng、およびSysDigであり、システムにカスタムカヌネルモゞュヌルをむンストヌルする必芁がありたす。 はい、これらの人を信頌できたすが、パフォヌマンス枬定ツヌルを実行するためにカヌネルに䜕か新しいものをロヌドする必芁があるこずはただ少し疑わしいです。



幞いなこずに、Windowsには、聞いたこずがあるかもしれないかなり軜量のむベントトレヌスWindowsトレヌスフレヌムワヌクがありたす。 このフレヌムワヌクを䜿甚するず、プロセッサのプロファむル、ガベヌゞコレクションの堎所、アプリケヌションがアクセスするファむル、ディスクぞのアクセス堎所などを決定できたす。







しかし、ETWはあたり䟵襲的ではないずいう事実にもかかわらず、ETWから結果を取埗する速床が問題になる堎合がありたす。 以䞋に、PerfViewを䜿甚しお生成されたログファむルの䟋を瀺したす。







ご芧のずおり、プロセッサの䜿甚状況に関する情報を10秒間収集し、合蚈15 MBのデヌタが取埗されたした。 したがっお、むベントトレヌスを䜿甚しおシステムを数時間テストできるずは考えられたせん。デヌタ量が倚すぎたす。 さらに、CLR Rundownを完了するのに12.7秒かかり、その埌デヌタを倉換しお開くのに時間がかかりたした時間を赀で匷調衚瀺したした。 ぀たり、10秒以内にデヌタを収集するには、30分間かけおデヌタを凊理しお開く必芁がありたす。



これはかなり良い結果ず考えられおいるずいう事実にもかかわらず、私はそれがあたり奜きではありたせん。 したがっお、私が自分で曞いたツヌルに぀いおお話したいず思いたす。



Etracehttps://github.com/goldshtn/etraceは、ETWのオヌプン゜ヌスコマンドラむンむンタヌフェむスです。 あなたは圌にあなたが芋たいむベントを䌝えるこずができ、圌はそれらに぀いおの情報をリアルタむムで提䟛したす。 むベントが発生するずすぐに、コマンドラむンで確認できたす。





> etrace --help

...

䟋

etrace --clr GC --event GC / AllocationTick

etrace-カヌネルプロセス、スレッド、FileIO、FileIOInit --eventファむル/䜜成

etrace --file trace.etl --stats

etrace --clr GC --event GC / Start --field PID、TID、理由[12]、タむプ

etrace --kernelプロセス--eventプロセス/ start --where ImageFileName = myapp

etrace --clr GC --event GC / Start --duration 60

etrace-その他のMicrosoft-Windows-Win32k --event QueuePostMessage

etrace --list CLR、カヌネル



たずえば、etraceを開始しお、「GCむベントが欲しい」ず蚀いたす。 そのようなむベントが発生するずすぐに、そのタむプ、理由、プロセスなどを確認したいず思いたす。







私が自分で曞いお玹介したい別のツヌルは、 LiveStacksです。 たた、ETWに関連しおいたす。 LiveStacksは、興味深いむベントのスタックトレヌスを収集したすガベヌゞコレクション、プロセッサの負荷、アプリケヌションがアクセスするファむル、ディスクにアクセスする堎所など。 LiveStacksず他の同様のツヌルの䞻な違いは、リアルタむムでの情報の出力です。 どのプロセスが実行されおいるかを知るために、デヌタ凊理が完了するたで埅぀必芁はありたせん。



デフォルトのプロセッサプロファむリングモヌドの䟋を次に瀺したす。 LiveStacksはVisual Studioでプロセスを確認し、プロセス内のコヌルスタックを衚瀺したす。これは、CPU時間を最も消費したす。







別の䟋「 ガベヌゞコレクションの開始堎所、特定のプロセスたたはシステム党䜓でガベヌゞコレクションに぀ながったコヌルスタックを衚瀺 」ク゚リで、LiveStacksはリアルタむムでガベヌゞコレクションが行われる堎所に関する情報をコヌルスタックに提䟛したす。







結果から、LiveStacksは、コン゜ヌルに衚瀺された呌び出しスタックを芖芚化するこずにより、フレヌムグラフを生成できたす。



> LiveStacks -P JackCompiler -f> stacks.txt

ˆC

> perl flamegraph.pl stacks.txt> stacks.svg



これらのツヌルを䜿甚するず、デヌタ凊理を埅たずに結果をすばやく取埗できるためです。



効果的な蚈装のためのシステムを構築する方法



新しいプロゞェクトのシステム、ラむブラリ、アヌキテクチャを構築するずき、将来のパフォヌマンス分析を簡玠化するいく぀かのこずを事前に考慮する必芁がありたす。



  1. 興味深いむベントディスクアクセス、ガベヌゞコレクションなどの呌び出しスタックが簡単に取埗できるこずを確認しおください。

  2. 静的コヌドむンスツルメンテヌショントレヌスポむントを実装しお、プロセスに関するリアルタむム情報を取埗できるようにしたす。

  3. 重芁なプロセスは、オヌバヌヘッドなしで、システムを再起動するこずなく、単にログレベルで蚭定するこずで有効にできるこずを確認しおください。

  4. 動的むンスツルメンテヌションのデバッグポむントプロヌブを远加したす。

  5. パフォヌマンス分析を実行する人がシステムの動䜜を理解するのに䜙分な時間を費やす必芁がないように、䟋ずドキュメントファむルを䜜成したす。



非垞に優れたむンスツルメンテヌションを備えたサンプルプロゞェクトは、Windows䞊の.NETであり、10幎以䞊にわたっお倚くの人々に䜿甚されおいたす。 䞊で話したETWむベントがありたす。興味深いむベントの呌び出しスタックをキャプチャし、それらを関数名に倉換する機䌚がありたす。 そしお、これらはすべおデフォルトで含たれおいたす







このような蚈枬ツヌルを䜿甚しおプロゞェクトを䜜成するこずは簡単ではありたせん。 たずえば、Linux甚の.NET Core 2.0を芋るず、すべおがそれほどバラ色ではありたせん。 Linuxにはパフォヌマンスを分析するための優れたツヌルがないためではなく、プロファむルずデバッグが簡単なプラットフォヌムを構築するのはかなり難しいためです。



Linux甚の.NET Core 1.0の䜕が問題なのか知りたいですか プラットフォヌムにはむベントがありたすが、コヌルスタックを取埗するこずはできたせん。むベントが発生したこずしかわかりたせん情報量が少ない。 別の䟋呌び出しスタックを倉換しお関数名を取埗するには、倚くの準備手順を実行する必芁がありたす。 そのため、ドキュメントでは、ZIPファむルをWindowsで開くこずを掚奚しおいたすこの䟋を䞊蚘に瀺したした。



優先事項がすべおです。 パフォヌマンス分析を実行する胜力が開発䞭のシステムにずっお重芁な芁件であるず考える堎合、このようなものをリリヌスするこずはありたせん。 もちろん、これは私の芋解です。



統蚈に泚意しおください



統蚈ずツヌルはしばしば私たちを欺きたす。 この点で留意すべき点がいく぀かありたす。



  1. 平均倀は無意味です。

  2. 䞭倮倀は無意味です。

  3. パヌセンタむルず分垃は、䜕をしおいるかを正確に知っおいる堎合にのみ圹立ちたす。

  4. デヌタに適切な芖芚化を䜿甚したす。

  5. 協調的な脱萜の珟象に泚意しおください。



たずえば、誰かが「平均システム応答時間は29ミリ秒だ」ず蚀いたす。 これはどういう意味ですか たずえば、平均応答時間が29ミリ秒の堎合、最悪の倀は50ミリ秒たたは60ミリ秒であり、最高はれロに近いずいう事実です。 たたは、ほずんどの堎合、応答時間は10ミリ秒ですが、システムの動䜜が非垞に遅くなるモヌド応答時間は最倧250ミリ秒があり、平均倀も29ミリ秒です。







平均応答時間が同じであるこれら2぀のケヌスを瀺す2぀のグラフは、たったく異なるこずがわかりたす。 䜕が起こっおいるのかを実際に把握するには、数字を芋るだけでは䞍十分で、実際の分垃を調べる必芁がありたす。



りェブで芋぀けた玠晎らしい研究がありたす。 芁玄統蚈のみを信頌できない理由を瀺しおおり、垞にデヌタを芖芚化する必芁がありたす。







著者は、同じ芁玄統蚈量同じ平均x / y、1぀の暙準偏差x / y、同じ盞互盞関で13のデヌタセットを芖芚化したした。 ただし、これらのデヌタセットはたったく異なっお芋えたす。 ぀たり、数字だけを芋るず、䜕の意味もありたせん。 数字だけを芋るず、デヌタの「フォヌム」は芋えたせん。



BenchmarkDotNetは、倚くの人が䜿甚するラむブラリです。 それは単に豪華ですが、デヌタの「圢状」を衚瀺したせん少なくずもデフォルトでは。 コン゜ヌルで実行するず、デヌタの「フォヌム」ではなく、平均、暙準偏差、信頌区間、四分䜍数などの倚数の数倀が出力されたす。 これは非垞に重芁です。 䞀郚のタむプの分析では、デヌタの「フォヌム」が芋えないずいうこずは、重芁なこずを芋逃すこずを意味したす。



平均に䟝存するこずでスキップできるものの䟋を次に瀺したす。 このグラフは遅延時間を瀺しおいたす。 99のケヌスでは、応答時間は200ミリ秒よりもわずかに短いですが、呚期的なst音が芳察される可胜性がありたす-短期間で発生する長すぎる遅延10ミリ秒たでです。







たた、ほずんどの堎合、パフォヌマンス分析を実行する際に、st音に泚意を払うよう求められたす。これは、ナヌザヌが時々遭遇する問題である平均倀よりも高い倀です。 それらを識別するには、䞊のグラフのようにすべおのデヌタポむントを芖芚化するか、䞋のグラフのように分垃を構築する必芁がありたす。







人々がパヌセンタむルで犯すもう1぀の䞀般的な間違いは、パヌセンタむルで数孊的操䜜を行うこずです。 たずえば、私のクラむアントが行ったようにパヌセンタむルを平均化するこずはできたせん。







2台のサヌバヌがあるずしたす。 サヌバヌAの堎合、90の時間の遅延時間は90ミリ秒であり、サヌバヌBの90の時間の遅延時間は22ミリ秒です。







これらの倀を平均化できないこずを理解するこずが重芁です。 芁求の90で、応答が57ミリ秒未満になるのは事実ではありたせん。 実際、リク゚ストの90は68ミリ秒よりも速く応答したす。



したがっお、関心、四分䜍数などを平均化するこずはできたせん。 垞にデヌタずその普及を確認する必芁がありたす。



次のような音が聞こえるこずがありたす。 私のナヌザヌは誰もこれを芋たせん」Amazon.comのりェブサむトのペヌゞを䟋ずしお䜿甚しお、なぜこれが重芁なのかを説明したす。 圌女は328件のリク゚ストを行いたした。 すべおのク゚リが独立しおいるず仮定するず、そのうちの少なくずも1぀が99パヌセンタむルにある可胜性はどのくらいですか



P = 1-0.99 328〜96



答えは96です。 したがっお、Amazon.comペヌゞにアクセスするず、99パヌセンタむルで少なくずも1぀のリク゚ストを受け取る可胜性が非垞に高くなりたす。 たた、ナヌザヌが比范的耇雑なシステムにアクセスする堎合、最悪のシナリオが発生する可胜性は非垞に高くなりたす。



倧芏暡システムには本栌的なツヌルを䜿甚しおください



この蚘事のフレヌムワヌクで最埌に蚀及したいのは、倚数のマシンで構成されるシステムに特別なツヌルを䜿甚する必芁があるずいうこずです。 このようなツヌルでできるこずは次のずおりです。



. – Vector Netflix. , , , - .







– AMP- New Relic , .NET. , . , .



: !



, , , . ?



  1. , , , .
  2. ? ? 䜕が機胜しなかったのですか
  3. ?
  4. ?
  5. , ?
  6. , ?
  7. , , , .





— .NET, . DotNext, 12-13 , Debugging and Profiling .NET Core Apps on Linux . Production Performance and Troubleshooting of .NET Applications.



:



, .



All Articles