Submit Search
Upload
Leak canaryで メモリリーク調査
•
Download as PPTX, PDF
•
3 likes
•
7,039 views
B
baroqueworksdev
Follow
関西モバイルアプリ研究会 #2 http://kanmoba.connpass.com/event/14252/
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 23
Download now
Recommended
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
Masahito Zembutsu
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
Recommended
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
Masahito Zembutsu
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
Docker 基本のおさらい
Docker 基本のおさらい
Naoki Nagazumi
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Sindharta Tanuwijaya
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
SUPWAT 採用デック資料(PDF)
SUPWAT 採用デック資料(PDF)
ShotaroHATANAKA1
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
tak9029
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
demuyan
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
Hiroyuki Wada
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Docker超入門
Docker超入門
VirtualTech Japan Inc.
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
baroqueworksdev
Team Development for iOS / Android
Team Development for iOS / Android
baroqueworksdev
More Related Content
What's hot
Docker 基本のおさらい
Docker 基本のおさらい
Naoki Nagazumi
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Sindharta Tanuwijaya
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
SUPWAT 採用デック資料(PDF)
SUPWAT 採用デック資料(PDF)
ShotaroHATANAKA1
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
tak9029
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
demuyan
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
Hiroyuki Wada
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Docker超入門
Docker超入門
VirtualTech Japan Inc.
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
What's hot
(20)
Docker 基本のおさらい
Docker 基本のおさらい
トランザクションの設計と進化
トランザクションの設計と進化
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
SUPWAT 採用デック資料(PDF)
SUPWAT 採用デック資料(PDF)
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
TLS, HTTP/2演習
TLS, HTTP/2演習
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Docker超入門
Docker超入門
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
More from baroqueworksdev
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
baroqueworksdev
Team Development for iOS / Android
Team Development for iOS / Android
baroqueworksdev
Firebase analytics for_android _ i_os
Firebase analytics for_android _ i_os
baroqueworksdev
Android m finger print(public)
Android m finger print(public)
baroqueworksdev
JUnit for android
JUnit for android
baroqueworksdev
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
baroqueworksdev
Sns連携アプリの準備
Sns連携アプリの準備
baroqueworksdev
Firefox勉強会 2nd gigs_資料
Firefox勉強会 2nd gigs_資料
baroqueworksdev
KeonとPeakを買ってみた
KeonとPeakを買ってみた
baroqueworksdev
More from baroqueworksdev
(9)
デザイン領域へiOS / Android開発
デザイン領域へiOS / Android開発
Team Development for iOS / Android
Team Development for iOS / Android
Firebase analytics for_android _ i_os
Firebase analytics for_android _ i_os
Android m finger print(public)
Android m finger print(public)
JUnit for android
JUnit for android
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
Sns連携アプリの準備
Sns連携アプリの準備
Firefox勉強会 2nd gigs_資料
Firefox勉強会 2nd gigs_資料
KeonとPeakを買ってみた
KeonとPeakを買ってみた
Leak canaryで メモリリーク調査
1.
LeakCanaryで メモリリーク調査 @nory_kaname
2.
自己紹介 ● 組み込みエンジニア ● 携帯電話開発(9年) o
ガラケー o スマートフォン ● Android Developer(5年) o 組み込み支援 o Frameworkカスタマイズ o アプリケーション開発 ● クックビズ株式会社所属
3.
執筆 プロの力が身につく Androidプログラミングの教科書
4.
本編
5.
● LeakCanaryを使おう o Leak検知時にNotification通知してくれる ●
Android標準のメモリリークも存在する ● 困った時は、stackoverflowで聞け ● Githubにコントリビュートよろしく 絶対にLeakCanaryをいれろ!! まとめ
6.
なんでカナリア ● 毒ガス検知 o いわゆる炭鉱のカナリアは、炭鉱においてしばしば 発生するメタンや一酸化炭素といった窒息ガスや毒 ガス早期発見のための警報として使用された。本種 はつねにさえずっているので、異常発生に先駆けま ずは鳴き声が止む。つまり危険の察知を目と耳で確 認できる所が重宝され、毒ガス検知に用いられた。 引用元:http://ja.wikipedia.org/wiki/カナリア
7.
メモリリークを埋め込むやつら ● いまだに「Javaはメモリリークしない」と 信じてるプログラマ ● ライフサイクルを理解していない ●
APIリファレンスを読まない ● 死んでほしいレベルの設計 close(),unregist(),recycle()など終了処理をして いない、なんでもかんでもthisを渡す。
8.
LeakCanaryとは ● Square社のライブラリ o https://github.com/square/leakcanary o
メモリリーク検知ライブラリ
9.
メモリリーク検知!! Activity.onDestory時にメモリリークチェック リーク検知すると、Notificationに通知 参照オブジェクトをリスト表示
10.
処理はこんな感じ ● ApplicationクラスをLeakCanaryに渡す (LeakCanary.java) ● ActivityLifecycleCallbacksを利用してActivity.onDestroy をフック(ActivityRefWatcher.java) ●
WeakReferenceで参照チェック (RefWatcher.java) o Backgroundスレッド(Executor)でチェック実行 o GC実行、hprofファイル取得 AndroidHeapDumper.java Debug.dumpHprofData()使用
11.
導入が楽々!! Step.1 ライブラリ追加 build.gradleに記載 dependencies { debugCompile
'com.squareup.leakcanary:leakcanary-android:1.3' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' }
12.
導入が楽々!! Step.2 Applicationクラスからcallする public class
ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); LeakCanary.install(this); } }
13.
Fragmentのリークチェック LeakCanary.install()時にRefWatcherを取得 public class ExampleApplication
extends Application { private RefWatcher refWatcher; public static RefWatcher getRefWatcher(Context context) { ExampleApplication application = (ExampleApplication)context.getApplicationContext(); return application.refWatcher; } @Override public void onCreate() { super.onCreate(); refWatcher = LeakCanary.install(this); }
14.
Fragmentのリークチェック Fragment.onDestroy()でwatchをcall public abstract class
BaseFragment extends Fragment { @Override public void onDestroy() { super.onDestroy(); RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity()); refWatcher.watch(this); } }
15.
リークを検知すると Notificationで通知してくれる
16.
リークを検知すると Activity起動、参照オブジェクトをリスト表示
17.
Logcatに出力してくれる logcatでの出力 05-10 18:13:00.377 9098-9965/com.ponnex.justdrive
D/LeakCanary﹕ In com.ponnex.justdrive:1.0:1. * com.ponnex.justdrive.DebuggingActivity has leaked: * GC ROOT static android.support.v4.content.LocalBroadcastManager.mInstance * references android.support.v4.content.LocalBroadcastManager.mReceivers * references java.util.HashMap.table * references array java.util.HashMap$HashMapEntry[].[51] * references java.util.HashMap$HashMapEntry.key * references com.ponnex.justdrive.DebuggingActivity$3.this$0 (anonymous class extends android.content.BroadcastReceiver) * leaks com.ponnex.justdrive.DebuggingActivity instance * Reference Key: 4fea07d9-9369-4618-a8e0-9e63b3e1b908 * Device: samsung samsung GT-I9100 pa_i9100 * Android Version: 5.1.1 API: 22 * Durations: watch=5219ms, gc=244ms, heap dump=4978ms, analysis=19968ms リーク出典:http://stackoverflow.com/questions/30150272/memory-leak-on-appcompatactivity-using-leakcanary
18.
Android標準のリークもあるよ logcatでの出力 * LEAK CAN
BE IGNORED. * jp.co.XXXXXXXXXXXXX has leaked: * GC ROOT android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper.mParentInputMeth odManager * references android.view.inputmethod.InputMethodManager.mCurRootView * references com.android.internal.policy.impl.PhoneWindow$DecorView.mContext * leaks jp.co.XXXXXXXXXXXXX has leaked instance * Reference Key: 2807fc51-f9b4-4a1f-b6ba-33ba244189ec * Device: LGE google Nexus 5 hammerhead * Android Version: 5.1 API: 22 * Durations: watch=5062ms, gc=156ms, heap dump=1639ms, analysis=15535ms IGNOREDと出力されます
19.
Android標準のリークもあるよ すでに確認されているリークは、AndroidExculedRefs.java に記載 https://github.com/square/leakcanary/blob/master/leakcanary- android/src/main/java/com/squareup/leakcanary/AndroidExcludedRefs.java
20.
Android標準のリークを発見した 発見した場合、以下の手順でissueに登録 ● leak trace情報を登録 ●
AOSPのソースを確認、何が起こったか調査。 https://github.com/android/platform_frameworks_base ● Fix済みかどうか、最新Android Verで確認。再現手順確 立 ● AOSPのissue trackerに登録 https://code.google.com/p/android/issues/list ● AndroidExcludedRefs.javaを修正して、LeakCanaryに pull request ここに登録: https://github.com/square/leakcanary/issues
21.
リーク調査で困ったら 困ったらstackoverflowで聞け!!(公式)
22.
私も回答します。 聞くだけじゃなくて、回答する側になろう
23.
ご静聴、ありがとうございました。
Download now