Iphone iOS应用程序被抛弃,内存占用率很低
很抱歉发了这么长的帖子……我有一个非常冗长的习惯-P 我的iOS应用程序有一个奇怪的问题,用户已经报告了几个月了。我已经研究过好几次了,但还是遇到了障碍。该应用程序已被抛弃,但在被抛弃时似乎没有占用太多内存。例如,以下是一个用户的日志(应用程序名称和标识符已更改):Iphone iOS应用程序被抛弃,内存占用率很低,iphone,memory,jettison,Iphone,Memory,Jettison,很抱歉发了这么长的帖子……我有一个非常冗长的习惯-P 我的iOS应用程序有一个奇怪的问题,用户已经报告了几个月了。我已经研究过好几次了,但还是遇到了障碍。该应用程序已被抛弃,但在被抛弃时似乎没有占用太多内存。例如,以下是一个用户的日志(应用程序名称和标识符已更改): 事件标识符:忽略 CrashReporter键:省略 硬件型号:iPhone2,1 操作系统版本:iPhone操作系统4.3.5(8L1) 内核版本:达尔文内核版本11.0.0:Sat Jul 9 00:54:20 PDT 2011
事件标识符:忽略
CrashReporter键:省略
硬件型号:iPhone2,1
操作系统版本:iPhone操作系统4.3.5(8L1)
内核版本:达尔文内核版本11.0.0:Sat Jul 9 00:54:20 PDT 2011;根目录:xnu-1735.47~1/释放_臂_S5L8920X
日期:2011-10-0109:50:03+0100
自快照以来的时间:41毫秒
免费网页:710
有线网页:10076
可购买页面:416
最大流程:跳板
过程
名称UUID计数常驻页面
MY_APP 2258(已丢弃)(激活)
MobileMuicPlaye 1024(已丢弃)
移动电话649(已丢弃)
MobileMail 716(已丢弃)
迷幻药148
通知117
BT182服务器
通信中心440
跳板3305(主动)
附件D 160(已丢弃)
apsd 278
配置。日志记录似乎证实了内存使用率低(在上述丢弃之前,app-resident mem报告为9773056字节)。虚拟大小很大(342740992),但是…它是虚拟的-P
这只影响到一小部分用户,我只在3GS设备上看到过这种情况(iOS 4.x…版本各不相同,但我认为似乎是从4.2开始的)。而且,对于受影响的用户来说,它总是在大约15分钟后发生
我已经尝试过让用户在报告了最简单的用例后使用这个应用程序,以防出现一些导致问题的奇怪行为,但它仍然会发生。这让我相信这是用户手机的问题,但我不喜欢告诉他们,如果没有什么东西可以指出这可能是问题所在。我无法在我的3GS或3G测试设备上复制它
它似乎不是常见的罪魁祸首(高脏内存使用率、内存泄漏等),所以我非常困惑于如何解决这个问题。有什么建议吗?或者至少我可以走一条路来进一步调查-P从长远来看,您正在使用什么样的优化?一些影响数学精度的东西可能会产生影响,比如说快速数学之类的。如果你在malloc mem cal的某个地方有一个浮点数,这可能会影响你的记忆
正如我所说的,在切换到使用LLVM3(因为iOS 5不支持香草gcc)之后,这个问题似乎已经消失了。更新过程中也有一些小的代码更改,LLVM3的静态分析器也发现了一些小内存泄漏,gcc和泄漏都没有检测到,所以我不能肯定地说问题是gcc(在iOS上)特有的。但是,通过更好的静态分析,切换到LLVM 3似乎可以直接或间接地解决问题:-P
希望这能帮助其他人。另一个注意事项。我在内存日志记录中也使用了host_统计数据(我知道它不代表设备可用内存),并在观察到此问题时,在每次内存警告后观察到总内存减少。非活动内存慢慢减少到0,这时应用程序被丢弃。这是否意味着用户空间因某种原因而减少(memmap?)?我以为它总是固定的。或者,主机的统计数据在iOS上完全不可靠吗?或者,可能是iOS在警告后限制内存?只是猜测…:-我现在可以用我的测试设备重新制作这个了。我重新编译了开发人员签名,但启用了发布优化(duh…应该早点尝试)。但是,我不能每次执行都复制它,更糟糕的是,当连接到调试器或工具时,我根本不能复制它。Ug。我怀疑某个竞争条件以某种方式导致内存泄漏,但仪器外部的所有测量结果(包括LowMemory日志)都表明内存使用率低。如果我能用仪器复制它,我肯定能验证它…:-P那么,为什么它会被抛弃???你能找到解决方案或取得任何进展吗?我们在3GS和我们的客户身上看到了一个非常类似的问题——虽然不是一直都在发生,但我们可以在内部复制它。该应用程序也以同样的方式被抛弃——也没有泄漏报告——我们一直在努力追踪它,但到目前为止还没有任何运气。这确实很烦人。还没有确定的消息,但我最近更新了针对iOS5的编译,这需要切换到LLVM(因为最新的xcode至少在前端转储了gcc)。我改用纯LLVM3(相同的优化选项),并注意到从那时起它就没有在我的测试设备上被抛弃。我们刚刚部署了一个更新,所以我们正在等待报告是否减少。经过几周的测试,我们没有收到报告,也无法在切换到LLVM 3后复制崩溃。我们确实在升级过程中做了一些代码更改,所以可能是我无意中修复了一个问题,但它们都是良性的,所以我将这归因于iOS上GCC中的优化缺陷(尽管我不能让它更具体。:-P)。我只是使用-Os,没有特别添加或删除标志。看起来-ffast math仅使用-Ofast打开。谢谢你的意见。我开始怀疑是否有人会回答-PNo prob似乎是一个难解之谜,看起来如果某个地方发生泄漏,并且无法足够快地释放内存,那么可能您的一个对象被保存在system one中,因此当您释放副本时system one仍会杀死您的应用程序。当问题发生时,您是否尝试过不使用调试器而只查看控制台?有肌萎缩侧索硬化症吗
Incident Identifier: OMIT
CrashReporter Key: OMIT
Hardware Model: iPhone2,1
OS Version: iPhone OS 4.3.5 (8L1)
Kernel Version: Darwin Kernel Version 11.0.0: Sat Jul 9 00:54:20 PDT 2011; root:xnu-1735.47~1/RELEASE_ARM_S5L8920X
Date: 2011-10-01 09:50:03 +0100
Time since snapshot: 41 ms
Free pages: 710
Wired pages: 10076
Purgeable pages: 416
Largest process: SpringBoard
Processes
Name UUID Count resident pages
MY_APP <f01c118296fe329899981e37e00c6cc3> 2258 (jettisoned) (active)
MobileMusicPlaye <c26fcc882cf130f09979f9ca08521fce> 1024 (jettisoned)
MobilePhone <d3042adf269630daa58e43d0ba5eeb54> 649 (jettisoned)
MobileMail <573ff3a3e09334c7aa51d8568c845e11> 716 (jettisoned)
lsd <3fafa485b73836acb973d50feabd963a> 148
notifyd <9966082842de313a8e05a001c783faf4> 117
BTServer <01550e9527353eecae41ebee0f889603> 182
CommCenter <7d9446365b4836968ae361626ef8f939> 440
SpringBoard <5c55c6fba0843b0e924e116413b8c9d4> 3305 (active)
accessoryd <d30e340e36df356bbde3347a6ed1ef87> 160 (jettisoned)
apsd <47ffc9ce9f84371588bd3f937aaa20bb> 278
configd <a6d457fca42732d9ba809d03a2b3e3ae> 427
fairplayd.N88 <46c1d3fbe93a370089f783f96a5cf531> 177
locationd <9088e845dcbe37d890c8758655bf34c6> 1065
mDNSResponder <caf94711b8093dc5bc5736306f8ae818> 200
mediaremoted <21af791e80823c9f90f0be2b77a3d885> 251
mediaserverd <c731263114c33a07aef7bccdcf667271> 1512
lockdownd <1c7f2b41744c35dc92f679e90a73e240> 278
syslogd <d81669e7bdb93f9b9012020beac826f4> 99
usbethernetshari <25130d2f9a0334e3ae28780250343144> 110
launchd <e2d41e07a0743a089eadbae765709c82> 88
**End**