感谢您对这个问题的帮助,我真的很困惑。
我的一位 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 秒后)。根据我的应用程序的架构,我看不出内存泄漏如何导致这样的行为。
谢谢你的想法,马库斯