2

感谢您对这个问题的帮助,我真的很困惑。

我的一位 Beta 测试人员报告说我的应用程序经常崩溃。iOS 日志报告:

Apr 15 23:52:14 iPhone SpringBoard[58] <Warning>: Application 'UIKitApplication:de.loffler.XBMCMusicRemotePro[0x553a]' was killed by jetsam.  
Apr 15 23:52:14 iPhone UserEventAgent[26] <Warning>: 440891049998: id=de.loffler.XBMCMusicRemotePro pid=1518, state=0 

因此,该应用程序由于内存不足而被杀死。通常,我会知道做什么(寻找泄漏等),但是,有些问题非常奇怪:

1.内存使用率低

根据 JetsamEvent.ips,我的应用程序的内存使用量仅为 32MB(如果我正确解释报告:2050 个常驻页面 * 16384 个页面大小)。测试人员拥有一台配备 2GB RAM 的 iPhone 6S,因此在崩溃时,该应用程序使用的内存不超过设备总内存的 2%。此外,如果我总结报告中所有条目的“rpages”,我只会得到 ca。620MB 的使用量。也许我在阅读报告时有一些误解......

我写了一个测试函数,它只消耗内存,直到应用程序被杀死。在我的 iPhone 5S 上运行此功能时,该应用程序仅在达到 600MB 内存使用量时才会被终止。

{"timestamp":"2016-04-15 23:52:13.13 +0200","bug_type":"298","os_version":"iPhone OS 9.3 (13E234)"}  
{  
"crashReporterKey" : "bec1fa98267fbf2d761102140fcf61aa7b6b5e25",  
"kernel" : "Darwin Kernel Version 15.4.0: Fri Feb 19 13:54:52 PST 2016; root:xnu-3248.41.4~28\/RELEASE_ARM64_S8000",  
"product" : "iPhone8,1",  
"incident" : "A2B3C5FF-8ECC-4E07-BEDA-E847061F396B",  
"date" : "2016-04-15 23:52:13.13 +0200",  
"build" : "iPhone OS 9.3 (13E234)",  
"timeDelta" : 1739,  
"memoryStatus" : {  
"compressorSize" : 76679,  
"pageSize" : 16384,  
"compressions" : 2526427,  
"memoryPages" : {  
   "active" : 24493,  
   "throttled" : 0,  
   "fileBacked" : 24113,  
   "wired" : 13007,  
   "anonymous" : 12915,  
   "purgeable" : 127,  
   "inactive" : 10955,  
   "free" : 2290,  
   "speculative" : 1580  
},  
"uncompressed" : 125795,  
"decompressions" : 143684  
},  
"largestProcess" : "Facebook",  
"processes" : [  
{  
...  
{  
   "rpages" : 2050,  
   "states" : [  
     "frontmost",  
     "resume"  
   ],  
   "name" : "KodiMusicRemoteP",  
   "pid" : 1518,  
   "reason" : "vm-thrashing",  
   "fds" : 50,  
   "uuid" : "5103a88a-917f-319e-8553-c0189dd1abac",  
   "purgeable" : 127,  
   "cpuTime" : 4.619693,  
   "lifetimeMax" : 3557  
},  
...  
}  

2.没有内存警告

我正在将内存不足警告写入日志文件(通过 Cocoa Lumberjack),但在我的测试人员的日志中我找不到任何此类日志输出。我用我的测试功能测试了代码,它运行良好。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application  
{  
    DDLogError(@"applicationDidReceiveMemoryWarning");  
    [DDLog flushLog];  

    // ... (do some other stuff, release memory)  
}  

3.在其他任何地方都看不到

其他十个 beta 测试者中没有一个报告这个问题,我自己也没有在我的 iPhone 5S 上看到过这个问题,它的内存只有 6S 的一半。

4.没有典型的内存崩溃场景

我的测试人员报告说,该应用程序有时可以正常运行一段时间,但是当它崩溃并重新启动它时,它通常会很快再次崩溃(比如 10 秒后)。根据我的应用程序的架构,我看不出内存泄漏如何导致这样的行为。

谢谢你的想法,马库斯

4

0 回答 0