2012-12-22 47 views
9

由于看起来内存不足或内存损坏的情况,我们的应用程序在外地偶尔发生崩溃(通过BugSense发现),所以为了帮助我追踪它们,我启用了以下功能:GuardMalloc导致虚拟内存耗尽

  • malloc的自由曲线
  • malloc的警卫边线
  • 员的malloc
  • 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 

随着卫队的malloc禁用应用程序工作正常,但与它启用应用程序崩溃与这些消息。当我使用Leaks and Allocations工具进行剖析时,没有发现任何泄漏,并且所有内存范围的实时字节值都在30 MB到80 MB之间(取决于当时正在进行的操作)。当然,这对应用程序来说不是太多内存。

但是,消息指向我的应用程序使用太多的内存,但我不确定导致虚拟内存耗尽的是什么。 Xcode中是否有其他工具或调试器设置可用于帮助?

感谢,
大卫

+3

NSZombies会导致任何你自由的东西不能真正被释放,因此如果你做了大量的分配就会耗尽内存。 – user1118321

+0

禁用僵尸解决了这个问题。谢谢。 –

+0

嗨,同样的问题在那里,并修复禁用僵尸..谢谢。但我没有得到它的影响,你能解释我吗? – Nikunj

回答

9

User1118321是正确的。 NSZombies是造成这个问题的原因。

提交此答案,以便接受答案。