.NET 5とDiagnostics
かめがわ かずし(kkamegawa)
自己紹介
personal:
name: かめがわ かずし
alias: kkamegawa
community:
MVP: Microsoft MVP for Developer Technologies(2009-)
UsersGroup: Team Foundation Server Users Group
URL: https://dev.azure.com/tfsug/tfsuginfo
Blog: はてなブログ
URL: https://kkamegawa.hatenablog.jp
devblog radio: https://devblog.connpass.com/
This contents based on 2020/12/5
.NET 5がリリースされました
たくさんの機能追加 たくさんの性能向上 多少の破壊的変更
.NET(かつての.NET Core)はクロスプラットフォーム
Windowsだけきにしていればいい時代はおしまい
Windows/macOSで作ってLinuxへデプロイ(k8sなど)
クロスプラットフォームでの性能調査大丈夫?
.NET Framework 4.8までのおさらい
System.Diagnostics名前空間
パフォーマンスモニター
PerfView
その他3rd Partyツール
.NET 5では?
dotnet-trace(.NET Core 3.0以降)
dotnet-counter(同上)
Perfview(Windowsのみ)
その他3rd PartyツールやOSのツール
診断用dotnet tools
ツール インストール 概要
dotnet-counters dotnet tool install --global dotnet-
counters
Perfviewやdotnet traceでのパフォーマ
ンスカウンターログ収集用
dotnet-dump dotnet tool install --global dotnet-dump マネージドダンプの分析
dotnet-gcdump dotnet tool install --global dotnet-
gcdump
GCのダンプを取得
dotnet-trace dotnet tool install --global dotnet-trace EventPipeを使ってプロセスの実行ト
レースの収集を実施
dotnet-symbol dotnet tool install --global dotnet-
symbol
ダンプの分析に必要なモジュールと
シンボルのダウンロードを実施
dotnet-sos dotnet tool install --global dotnet-sos ネイティブデバッガーで.NET Coreのシ
ンボルを分析するための拡張機能
Demo
dotnet toolsでのマネージドダンプ取得
dotnet-dump collectで開始
dotnet-dump analyzeで中身見ていく
サブコマンドたくさん
ダンプファイル名
対象プロセスID
正直つらい
デバッグを支援するIDE
Visual Studio(Windows / macOS)
16.9 PreviewではWSL2と統合
プレビュー以前なら.NET Core Debugging with WSL 2 - Preview拡張機能
Visual Studio Code
monoDevelop(Linuxのみバイナリー提供)
https://www.monodevelop.com/
Rider(JetBrains)
https://www.jetbrains.com/ja-jp/rider/
Visual Studioの診断ツール
Visual Studio診断ツール is 便利
プロファイラーより気軽に使えます
実行中のCPUプロファイリング
任意のメモリスナップショット取得
例外のイベント記録
昔プロファイラーって
あったよね?
まだあります(パフォーマンスプロファイラー)
プロファイラーはもっと便利
リリース構成での性能調査
細かい.NETのイベントもとれる
クラウドでもVM(IaaS)ならば使用可能
プロファイラーの使い方
Rider IDE
※:2020/12/5現在
RiderがC# 9.0の構文
に対応してないけど、
コンパイルはもちろん
可能。
Riderでのプロファイリング
サードパーティーの診断ツール(一部)
.NET Memory Profiler(SciTech)
https://memprofiler.com/
dotMemory(JetBrains)
https://www.jetbrains.com/ja-jp/dotmemory/
ANTS Memory Profiler(RedGate)
https://www.red-gate.com/products/dotnet-development/ants-memory-profiler/
.NET Memory Validator(Software Verify)
https://www.softwareverify.com/dotnet-memory.php
.NET Profiler(YourKit)
https://www.yourkit.com/.net/profiler/features/
他Visual Studio Marketplaceにあるもの
https://marketplace.visualstudio.com/search?term=memory&target=VS&categor
y=Tools&vsVersion=&subCategory=All&sortBy=Relevance
プロダクション診断ツールやサービス(一部)
 Stackify
https://stackify.com/
 RevDebug
https://revdebug.com/
 OzCode
https://oz-code.com/
 NewRelic
https://newrelic.co.jp/
 DataDog
https://www.datadoghq.com/ja/
 Application Insights
https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/app-insights-overview
 Mackerel
https://mackerel.io/ja/
 Windows Performance Recorder(Windows付属)
https://docs.microsoft.com/ja-jp/windows-hardware/test/wpt/wpr-quick-start
どれを使えば🤔🤔
結局OSや.NETランタイムから取得するので、採取できる
情報に違いはない
この辺の理由で決めてもいいのでは?
UIが好み
買いやすい
日本語化されている
(日本語の)情報が多い
サポートがある
価格(無料ツールで頑張る、お高いツールで楽をする等)
Linuxでのデバッグ
Visual Studio + Remote Debug(ssh)
WSL2と一緒に
Visual Studio Code(コンテナー用)
Visual Studio 2019 Preview(16.9)
Linuxでのプロファイル
Perfcollect
https://github.com/dotnet/coreclr/blob/master/Documentation/proj
ect-docs/linux-performance-tracing.md
→この方法ではlinux-tools-4.19.128-microsoft-standardがないといわれる
dotnet global toolsで実施
※:結果はWindowsのPerfViewやVSで解析
.NET 5での性能向上
こまごまと頑張ってる
https://devblogs.microsoft.com/dotnet/performance-improvements-
in-net-5/
障害時のトラブルシューティング
正しい情報収集
いつ、どの操作を、だれが、何が起きたか
調査に必要なものはあるか
クラッシュしたら発生時のダンプ
ログ
リリースしたときのソース、シンボル(意外と保存しない)
調査に欠かせないログ保存場所
ファイル
標準出力をリダイレクト
ETW(Event Trace for Windows)
イベントログ
データベース
資料的なURL
RevDebugのチュートリアル
https://revdebug.com/doc/tutorial/5.7.0.0/Getting-Started/Supported-
Technologies/net-core/
クラウドでの診断サンプル
https://github.com/dotnet/samples/tree/master/core/diagnostics/DiagnosticScen
arios
https://docs.microsoft.com/ja-jp/dotnet/architecture/containerized-
lifecycle/design-develop-containerized-apps/build-aspnet-core-applications-linux-
containers-aks-kubernetes
dotnet global Toolsでの診断
https://www.stefangeiger.ch/2020/05/07/dotnet-diagnostics-tools-counters.html

NET5 and Diagnostics