メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは...
Transcript of メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは...
![Page 1: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/1.jpg)
メモリリークと調査方法
タイコエレクトロニクアンプ株式会社
萩原 智恵
![Page 2: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/2.jpg)
それはある日突然に
• 納品したユーザ様の先から電話がかかってきました。
ユーザ:
「アプリケーションが午後になると固まるんです!!!」
私:
「へ?! 午後・・・・・ですか? (^_^;)」
![Page 3: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/3.jpg)
それはある日突然に私:
「そんな、、、タイマーを使う(見る)ような、
アプリケーションは今回作った
覚えはありません!!!」
ユーザ:
「いや~。Out Of Memory っていう
エラーがでるんです」
私:「 Out Of Memory?????・・・・
いやいや~。またまた、悪い冗談を。。。」
![Page 4: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/4.jpg)
.NETとマネージアプリケーション
• .NETのアーキテクチャはマネージコードであるはず!?!?
• Out Of Memory!!!
マネージコードでのメモリーリークなんて
信じられなーい!?!?(バレンタイン監督風に!?)
![Page 5: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/5.jpg)
マネージコードとは?
• マイクロソフトが提唱する次世代インターネット戦略、Microsoft.NET プラットフォームにおいて、アプリケーションやコンポーネントを実行するためのエンジン
• CLR (Common Language Runtime) に準拠し、CLR が提供するすべての機能を利用可能なプログラム・コード。具体的には、CLR が提供するガベージ・コレクションの機能や、セキュリティー機能などが利用できる。プログラムは CLR によって完全に管理される (manage される)
![Page 6: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/6.jpg)
ガベージコレクション(GC)とは
• 長年、C言語開発で苦しんできた私にとっては神様!!のような存在!?
• プログラム作成者が明示的にメモリの確保・解放を行う必要が無い(はず?)
– 使用されなくなったメモリーはきれいにお掃除や解放をしてくれる(はず?)
![Page 7: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/7.jpg)
どうして?
• マネージ(管理)されたコードなのに?
• そして何より、マネージコードには優秀なガベージコレクション(GC)があるはず!
なのに!なんで、なんで、なんで!
「Out Of Memory!!!」
![Page 8: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/8.jpg)
解決のために何をすべきか?
• その1
• その2
お昼になったら一度ログアウトしてください
メモリリークが発生している場所を特定する
![Page 9: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/9.jpg)
メモリリークの場所を特定する
• メモリリークの場所を特定するために有効な手段はなんでしょう????
パフォーマンスモニター
![Page 10: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/10.jpg)
パフォーマンスモニターとは?
• Windows 信頼性とパフォーマンス モニタはMicrosoft 管理コンソール (MMC) スナップインの 1
つで、システム パフォーマンスを分析するためのツール
• 1 つのコンソールから、アプリケーションとハードウェアのパフォーマンスをリアルタイムに監視したり、ログに収集するデータをカスタマイズしたり、警告と自動操作のしきい値を定義したり、レポートを生成したり、さまざまな方法で以前のパフォーマンス データを表示したりすることができます
![Page 11: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/11.jpg)
パフォーマンスモニターとは?
![Page 12: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/12.jpg)
パフォーマンスモニターを使ってみよう!
• 実際にパフォーマンスモニターでログ収集を行ないメモリリークが本当に起こっているかを調べ、場所を特定します
• デフォルトのカウンタではメモリリーク調査に適切なカウンタが表示されていないので追加する必要があります
![Page 13: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/13.jpg)
パフォーマンスモニターを起動する前に
• パフォーマンスモニターを起動し、ログを取る前に、調査する対象のアプリケーションを起動しておく必要があります
調査対象のアプリケーションを先に起動しておく
![Page 14: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/14.jpg)
パフォーマンスモニターを使ってみよう!
![Page 15: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/15.jpg)
パフォーマンスモニターを使ってみよう!
起動しておいた調査したいアプリケーション
を選択します
調査したいメモリ系のカウンタの追加を行います
![Page 16: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/16.jpg)
パフォーマンスモニターを使ってみよう!
情報を収集し、結果をログファイルに出力します
![Page 17: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/17.jpg)
パフォーマンスモニターを使ってみよう!
![Page 18: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/18.jpg)
ログを解析してみよう!
メモリが解放されている
リークは起きていない
メモリが解放されず、増え続けている
リークは起きている!!
![Page 19: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/19.jpg)
もっと詳しく内容を見て見たい!
![Page 20: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/20.jpg)
ちなみに、原因は。。--- 明示的に子フォームをクローズしない --
Dim [frmChild] As New frmChild
[frmChild].Show(Me)
Me.Close()
--- 明示的に子フォームをクローズする --
Dim [frmChild] As New frmChild
[frmChild].Show(Me)
[frmChild].Close()
[frmChild].Dispose()
[frmChild] = Nothing
Me.Close()
メモリーリークを起こす
【解決】明示的な子ウインドウ
のクローズが必要
\\VMCLONE\.NET CLR Memory(MemoryLeaktest)\# Bytes in all Heaps
0
100000
200000
300000
400000
500000
600000
1 74 147 220 293 366 439 512 585 658 731 804 877 950 1023
\\VMCLONE\.NET CLR Memory(MemoryLeaktest)\# Bytes in all Heaps
0
200000
400000
600000
800000
1000000
1200000
1 75 149 223 297 371 445 519 593 667 741 815 889 963
![Page 21: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/21.jpg)
まとめ
• NET ではメモリに関する心配事が減りますが、アプリケーションのメモリ使用に注意し、適切で効率的に動作することを保証する必要があります。
• アプリケーションが管理されているからといって、優れたソフトウェア エンジニアリング手法を投げ出し、GC が行う魔法に頼ってはいけません。開発やテストのプロセス中は、アプリケーションのメモリのパフォーマンス カウンタを監視し続ける必要があります。アプリケーションの適切な動作が顧客満足につながることを忘れないでください。(James Kovacs氏より)
![Page 22: メモリリークと調査方法download.microsoft.com/download/E/0/0/E004928D-8DDE-4AF2...ガベージコレクション(GC)とは •長年、C言語開発で苦しんできた私にとっ](https://reader033.fdocument.pub/reader033/viewer/2022041802/5e51f5eaab7f076836646445/html5/thumbnails/22.jpg)
参考資料
• マネージ コードでのメモリ リークの識別と回避http://msdn.microsoft.com/ja-jp/magazine/cc163491.aspx
• ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 PartⅠhttp://www.microsoft.com/japan/msdn/net/mag00/GCI.aspx
• ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 Part Ⅱhttp://www.microsoft.com/japan/msdn/net/mag00/GCI2.aspx