上級サポート エンジニアの経験お伝えしま …...de:code 2019 DT03...

Preview:

Citation preview

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のメモリ解析!

https://aka.ms/decode18Ad05

Visual Studio 2019のデバッグ強化ポイント

(ダンプ)、プロファイル

まとめ

まとめ

© 2018 Microsoft Corporation. All rights reserved.

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

© 2019 Microsoft Corporation. All rights reserved.

本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。

本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。

Recommended