OOMとは
ユーザから見える、アプリの異常終了の要因の多くは、例外発生を要因としたクラッシュと考えられますが、その他の主な要因としては、Out Of Memory(OOM)が考えられます。アプリケーションが大量のメモリーを利用し、システムのメモリが足りなくなって来た場合、OSによりそのアプリケーションは強制的に終了させられます。通常は、ユーザから見えない(バックグラウンドや動作していない)アプリケーションが優先的に終了させられますが、アプリケーションが表示中の状態でも大量にメモリーを消費し、システムのメモリーが足りなくなって来た場合、OSにより強制的に終了させられます。このようなケースの異常終了をOOMによる終了として、SmartBeatで発生数を確認していただくことが出来ます。
どのようにOOMを検出するか?
OOMによりアプリが終了する場合、アプリのプロセス内部でイベントを取得することはできず、アプリのプロセス外部から強制的に終了させられてしまうため、正確にOOMを検出することはできません。また、アプリが表示中の状態でプロセスが終了することは、一般的には異常終了となり、その中にOOMによる終了も含まれます。
そのため、アプリが表示中にプロセス終了した場合、以下のフローに従い、終了要因を判定し、次回起動時にOOMの発生を通知します。
注記
※JavaのOutOfMemoryErrorは例外/クラッシュとして判定されます
※以下のケースもOOMとして判定に含まれる可能性があります。
・xcodeなどのデバッガから強制終了した場合でかつ、アプリのバージョンアップを伴わないケース
・ハングアップ検出など、OOM以外の要因によりOS側から強制的に終了させられたケース
・アプリを表示中に強制的にデバイスの電源がOFFになったケース
※本機能は以下のSDKバージョンをご利用の場合のみ有効となります
・iOS SDK:1.23以上
・Android SDK:1.20以上
・Unity SDK:1.14以上
・Unreal Engine SDK:1.1以上
・Cordova SDK:1.1.0以上
参考
Memory Usage Performance Guidelines(apple)
Memory Monitor(android)