私たちのアプリは、メモリ不足またはメモリ破損状態のように見えるために、フィールドで時折クラッシュが発生しています(BugSenseを介して発見されました)。そのため、それらを追跡するために、次のことを有効にしました。
- Malloc Scribble
- Malloc Guard Edges
- ガードマロック
- Objective-Cゾンビオブジェクト
- Mallocスタックロギング
- 例外をログに記録します。
シミュレーターでアプリを少し操作した後(30秒未満)、次のメッセージが表示されます。
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
Guard Mallocを無効にすると、アプリは正常に動作しますが、有効にすると、これらのメッセージでアプリがクラッシュします。Leaks and Allocationsインスツルメントでプロファイリングすると、リークは検出されず、すべてのメモリのLiveBytes値は30MBから80MBの範囲になります(その時点で何をしているかによって異なります)。確かに、それはアプリにとってあまり多くのメモリではありません。
ただし、メッセージはアプリがメモリを使いすぎていることを示していますが、仮想メモリの枯渇の原因がわかりません。Xcodeで利用できる他のツールやデバッガー設定はありますか?
ありがとう、
デビッド