上級サポート エンジニアの経験お伝えしま …...de:code 2019 DT03...
Transcript of 上級サポート エンジニアの経験お伝えしま …...de:code 2019 DT03...
de:code 2019 DT03
上級サポート エンジニアの経験お伝えします
Visual Studio 2019 でメモリー リークを追え!
日本マイクロソフト株式会社
カスタマーサービス & サポート本部 エスカレーション エンジニア
牧 大介
今日持ち帰って頂きたいこと
はじめるまえに…
メモリーリーク?
「メモリーリークが発生しています」というエラーは起きないですよね?
• 「なんだかわからないが 動かない/動いてない!」
実際に現場で起きること
• メモリー使用量とは?
起きてみてわかること (1)
• 普通ってナンだ!?
• メモリー使用量内訳はどうやって調べればいいの?
• 怪しいところを見つけだすにはどうすればいいの?
それぞれについて、例題からお話しします
起きてみてわかること (2)
Demo
意図的にメモリー肥大化を発生させる
C# WinFormアプリケーションでOutofMemoryExceptionが発生。現在の物理メモリは 8GBですが、いくつにすればいいですか?
質問
Demo
仮想メモリー
仮想メモリー
プロセスのメモリー空間
Demo
メモリーの読みかた
Private Bytes コミットサイズ
• ワーキングセットWorkingsets
パフォーマンスカウンター
アプリケーションのメモリー不足エラーは、一般的にプロセスのメモリー空間不足です
システム全体の不足ではありません
物理メモリーが足りなくなれば、システム全体へ影響が出ます
回答
C#で、関数を抜けたのにプライベート変数のメモリーが解放されません。バグですか?
質問
Demo
.NET メモリーセグメント
.NETガベージコレクター
.NET メモリー セグメント
ファイナライザーガベージコレクター
Demo
ガベージコレクター
ガベージコレクターは自律的に動作し捨てるのも気分次第です意図的に動作させるとわかりやすいです
ガベージコレクターにもコストがかかります→ 全スレッドを停止させる場合があります
回答
プロセスがどんなオブジェクトでメモリーを使用しているか知りたいです良い方法はありますか?
質問
ダンプファイルを取りましょう
EXE dlldll dll dll
…
dll
Thread Heap
Image
int a = 10;string b = “Test”;
byte c = 255;
Assembly
Managed Thread
Managed Heap
MyApp.dll WaitItem()
mscorwks.dll SubFunc()
kernel32.dll ThreadStart()
Demo
ダンプ解析
リーク時のダンプ解析の考え方
ダンプの問題点…
windbg ダンプ解析は30分
時間泥棒なわりに実入りが少ない
Demo
Visual Studio 2019 でメモリー解析
Visual Studioのメモリ解析!
Visual Studioのメモリ解析!
Visual Studioのメモリ解析!
(ダンプ)、プロファイル
まとめ
まとめ
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
© 2019 Microsoft Corporation. All rights reserved.
本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。