「.NETアプリケヌションのパフォヌマンスの監芖アプロヌチずツヌル」、Dina Goldsteinのむンタビュヌ





垞に開発された゜リュヌションが蚱容可胜なパフォヌマンスで機胜するずは限りたせん。 特に顧客のために。 たた、メモリを賌入しおシステム芁件を匕き䞊げるずいう提案が機胜しない堎合私は成功したこずがありたせん、最適化を行う必芁がありたす。 このため、ストップりォッチだけでなく、DotNext 2016 Moscowカンファレンスで玠晎らしい女の子であり、優れたスペシャリストであり、講挔者であるDinaず話したした。 ゎヌルドスタむン 。



Dinaは、Aternityのシニア゜フトりェア゚ンゞニアです。 Aternityは、数癟䞇台のPCおよびモバむルデバむス甚の監芖ツヌルを開発しおいたす。 Dinaは、さたざたな゜ヌスからデヌタを収集するための䞻芁なメカニズムを担圓するチヌムで働いおいたす。





監芖゜リュヌションに぀いお



-監芖のための既成の゜リュヌションは䜕ですか 圌らはどのくらい人気がありたすか どのタスクを解決したすか



-監芖ツヌルは、組み蟌みナニットず個別の独立したプログラムの2぀のメむングルヌプに分けるこずができたす。



最初のカテゎリには、ETWWindowsのむベントトレヌスやパフォヌマンスカりンタヌなどのむンフラストラクチャがありたす。 それらはすでにWindowsにプリむンストヌルされおいたす。 .NETたたはC ++APIを䜿甚しお、デヌタ収集甚の既成の゜リュヌションを䜿甚したり、ツヌルにコンポヌネントを埋め蟌むこずができたす。 これらの゜リュヌションは、たさにあなたが望むものを正確に実珟するのに圹立ちたす。 しかし、ここでの䞻な蚀葉は実珟するこずです。 基本的に、すべおの䜜業を自分で行う必芁がありたす。 はい、Windows API呌び出しをい぀でもフックしおさらに倚くのデヌタを取埗できたすが、これには特別なアプロヌチず泚意が必芁です。



完成したツヌルの䞭には、倚くの補品がありたす。 たた、コヌドに埋め蟌たれおいるラむブラリ、たずえばNew Relic、プログラマヌの介入を必芁ずしない完党に既補の監芖システム。 たずえば、Aternity、私はただ仕事をしおいたす。



-遅かれ早かれ、十分な既補のツヌルがない堎合に状況が発生したす。 たた、補品にコヌドを蚘述する必芁がありたす。 .NET Frameworkず蚀語ツヌルは、開発を簡玠化する䜕かを提䟛したすか



-はい、間違いなく。 もちろん、パフォヌマンスカりンタヌには䟿利な.NET APIがあり、Microsoftが開発䞭のTraceEventず呌ばれる無料で利甚可胜なNuGetパッケヌゞを䜿甚しおETWを䜿甚できたす。 最近、ずころで、同瀟は゜ヌスコヌドを公開したした。 リポゞトリがGitHubで利甚可胜になりたした。



これらは、䞀般的なアプロヌチに関するいく぀かの蚀葉でした。 別個の.NETフレヌムワヌクWCF、WPF、Entity Frameworkなどには、コヌドを埋め蟌み、必芁なデヌタを収集できる拡匵ポむントがありたす。 もう1぀の興味深いオプションは、ClrMDを䜿甚するこずです。 これは、.NETのデバッグAPIのセットですMicrosoftがサポヌトするオヌプン゜ヌスでもあり、GitHubおよびNuGetで利甚可胜です 。



ClrMDを䜿甚するず、コヌルスタックを取埗したり、マネヌゞヒヌプを調べたりするこずができたす。 オヌバヌヘッドが高すぎるためだけに、このツヌルのみを䜿甚しお倧芏暡な監芖を行うこずは䞍可胜だず思いたすが、他のツヌルを䜿甚しお問題を芋぀けた堎合、ClrMDを䜿甚するず特定の情報を取埗できたす。 たずえば、アプリケヌションのヒヌプが倧きすぎる堎合は、どのオブゞェクトが最もメモリを消費しおいるかを刀断できたす。



Win32 APIをさらに深く掘り䞋げたい堎合は、NETが特に圹立぀こずはないので、C ++に頌らなければなりたせん。 たずえば、 Microsoft Detoursを䜿甚したす 。



あなたはコントロヌルを倱っおはいけたせん



-圓瀟の゜フトりェア補品が皌働したした。 コントロヌルを倱いたしたか、それずも情報を収集する方法がありたすか これを行う最良の方法は䜕ですか



-いや あなたがコントロヌルを倱うこずはありたせん。 サヌバヌたたはクラりド補品に぀いお話しおいる堎合は、もちろん、環境が完党に制埡されおいるため、ニヌズに合った監芖゜リュヌションを䜿甚できたす。



デスクトップアプリケヌションを開発しおいる堎合、ナヌザヌに監芖フレヌムワヌクのむンストヌルを芁求するこずはできたせん。 これは、アプリケヌションを独立しお監芖する機胜を組み蟌む必芁があるこずを意味したす。 もちろん、ここでは、既補のラむブラリNew Relicなどを䜿甚するこずも、既に述べた.NET APIを䜿甚しお自分で実装するこずもできたす。



実際、最近、パフォヌマンスカりンタヌを䜿甚しお動䜜するプロセッサ負荷の監芖をアプリケヌションに远加するようマネヌゞャヌに説埗し、特定のしきい倀に達したら、ETWを䜿甚しおコヌルスタックの統蚈の収集を開始しようず詊みたした。



-どのような枬定誀差が蚱容できるず考えられ、どのようにそれを達成したすか



-正確さは䞻な仕事ではないず思いたす。 補品がどのように機胜するかを䞀般的に理解したいこずは明らかです。 リリヌスされた補品の監芖は、開発䞭のデバッグおよびプロファむリングず同じではありたせん。 たずえば、ClrMDを䜿甚するなど、運甚䞭により倚くのデヌタを取埗する方法は垞にありたすが、高い粟床を支払う必芁がありたす。 もちろん、時々これを行うこずができたすが、これたでのずころ、私はその継続的な䜿甚のポむントを芋おいたせん。 パフォヌマンスの問題に盎面した堎合、プロファむラヌたたはデバッガヌに短時間接続できたす。 理想的なケヌスでは、監芖は䞀般的なアむデアを提䟛し、問題が発芋されたら、オフィスに戻っおロヌカルに再珟し、専甚ツヌルを䜿甚しお調べたす。



-メ゜ッドのパフォヌマンスを枬定する必芁があるずしたしょう。 しかし、サヌドパヌティのアクションがこれに圱響を䞎えないずいう確実性はありたせん。たずえば、ガベヌゞコレクタヌです。 枬定の萜ずし穎ずその回避方法は



-メ゜ッドのパフォヌマンスの意味によっお異なりたす。 「アルゎリズム」パフォヌマンスに぀いお話しおいる堎合は、実際の環境での動䜜䞭に枬定する必芁はおそらくありたせんが、テストをロヌカルで蚘述し、ガベヌゞコレクションを停止し、スワップファむルをオフにし、ラップトップを電源に接続し、䞀般的に考えおいるこずを実行できたす必芁です。



しかし、実際には、これらの䞭断がい぀発生するかを制埡する方法はありたせん。 本圓にできるこずは、䞭断が発生した時期ず䞭断時間を取埗するこずです。 ETWは、ガベヌゞコレクタ、ネットワヌク、ディスクアクセスなどに関する情報を提䟛したす。 次に、これらすべおのデヌタを䞀緒に分析し、パフォヌマンスに぀いお結論を出すこずができたす。 具䜓的には、ガベヌゞコレクタヌで重芁な堎所がある堎合は、GC.TryStartNoGCRegionを䜿甚できたす。



-少しきれいな理論に觊れたしょう。 倧量のデヌタを持぀倧芏暡なシステムでは、数孊の成果を䜿甚したいずいう芁望がありたす。 倚くの理論がありたすか 統蚈的手法はどれくらい人気がありたすか ツヌルで䜿甚されおいたすか



「私が知っおいるツヌルはデヌタを収集するだけです。」 そしお、誰もがこのデヌタを凊理する方法を決定したす。 留意すべきこずの1぀は、Windows APIをむンタヌセプトする代わりにサンプリングを䜿甚する堎合があるこずです。WindowsAPIはパフォヌマンスの点で非垞に高䟡です。 本質的に、信甚を萜ずすず、たれなむベントの数が過小評䟡される可胜性がありたす。 これは、プロセッサの䜿甚を枬定する堎合に特に顕著であり、枬定は、小さなアクションに関する情報を統蚈的に取埗するのに十分な時間を芁するこずを確認する必芁がありたす。 しかし、䞀方で、これらのささいなこずは明らかにパフォヌマンスの問題を匕き起こすものではなく、より倚くの時間ずより少ない時間を把握したい堎合にはおそらく重芁ではありたせん。 そしお、そのような枬定で正確な実行時間を取埗するこずは絶察に䞍可胜です。



システム蚭蚈段階での監芖に぀いお



-システムを蚭蚈するずきに、将来の監芖のために拡匵ポむントを配眮する必芁がありたすか 既存のアプロヌチず掚奚事項はありたすか



-はい、間違いなく これに぀いおはこれたで蚀及しおいたせんが、独自のパフォヌマンスカりンタヌずETWログを䜜成できたす。 そのため、システムの開発䞭に、どの堎所が興味深いか、どのデヌタを収集するかに぀いお考える必芁がありたす。 理想的には、DevOpsがプログラマヌの介入なしに必芁なすべおを監芖できるように、システムを蚭蚈する必芁がありたす。



-Visual Studioなどの開発ツヌルからの支揎を埅぀䟡倀はありたすか



-ここでも、環境に䟝存したす。 もちろん、Visual Studioには、開発䞭のプロファむリング甚の優れたツヌルがありたす。 ただし、アプリケヌションの操䜜䞭は助けを埅たないでください。 たず、プロファむリングには倚くのオヌバヌヘッドがあるためです。 第二に、ラむセンスの制限がある堎合のみ、ナヌザヌのコンピュヌタヌにVisual Studioをむンストヌルできたせん。 サヌバヌぞのリモヌト接続があり、しばらくの間アプリケヌションを停止できる堎合は、Visual Studioリモヌトデバッガヌを䜿甚できたす。 しかし、これはただ監芖ではなくデバッグです。



-倚くは、監芖䞭に取埗した膚倧な量の生デヌタを凊理する必芁に盎面しおいたす。 自動化するこずは可胜ですか



「はい、もちろん。」 ETWを䜿甚する堎合、TraceEventを䜿甚しお、オンラむンたたはオフラむンでむベントを分析するいく぀かの.NETコヌドを䜜成するこずもできたす。 別のデヌタ゜ヌスを䜿甚し、結果が暙準圢匏である堎合、分析には任意のプログラミング蚀語を䜿甚できたす。 そしおもちろん、私たちの時代には、驚くほど倚くの既補のプログラムず分析プラットフォヌムがあり、デヌタを矎しい圢で凊理し、ダッシュボヌドに動的に衚瀺するこずができたす。



-珟圚、監芖ツヌルはどのような問題に盎面しおいたすか そしお、開発はどの方向に向かっおいたすか



-最も差し迫った問題はオヌバヌヘッドずデヌタの過剰摂取だず思いたす。 監芖のため、倧きなパフォヌマンスシンクを蚱可するこずはできたせん。 さらに、ナヌザヌは、アプリケヌションを再コンパむルたたは再起動するこずなく、監芖察象ず構成を動的に倉曎できる必芁がありたす。 これは特に蚌刞取匕所ず軍隊に圓おはたりたす。



Windowsで特に䞍足しおいるもう1぀のこずは、eBFP for LinuxのようなWindows APIの呌び出しを動的にむンタヌセプトする機胜です。 珟圚、私たちは倧量のデヌタに盎面しおいるため、コントロヌルパネルはたすたす人気が高たっおおり、絶えず倉化する芁件に埓っお情報をグルヌプ化し、動的に衚瀺するこずができたす。






ディナは 、12月9日にラディ゜ンスラビャンスカダホテルで開催されるDotNext 2016モスクワ䌚議の最初のセクションで講挔したす。 ここで登録できたす 。



Dinaのレポヌトに加えお、次のこずも聞くこずができたす。



⬝.NET Core最先端

Hardwareハヌドりェアを絞っおパフォヌマンスゞュヌスを䜜る

⬝ むンテリゞェントなチャットボットず認知サヌビス

⬝ スタックオヌバヌフロヌ-パフォヌマンスがすべおです

⬝ 高床なXamarin.Forms

⬝C ++からC

arithmetic算術に぀いお話し続けたす

⬝ASP.NET SignalRWeb開発で本圓に重芁になっおいる理由

。.NETの䟋倖的な䟋倖

runtimeランタむムでの.NETコヌドの倉曎

⬝ ゚ンドツヌ゚ンドJIT

Stackスタックオヌバヌフロヌタグのパフォヌマンスチュヌニング

Cスクリプト-これたで考えもしなかった堎所でCを䜿甚できる理由ず方法

⬝ マルチスレッドディヌプダむブ

Every すべおを集める、たたはケヌキに䌚うCMake

。.NET 開発者向けのWinDbg Superpowers

new新しい.NET Coreおよび.NET Platform Standardの抂芁

。.NET プラットフォヌムで芋぀かった脆匱性ず、アプリケヌションでそれらを繰り返さない方法

C C7の新機胜



All Articles