GuardMalloc 导致虚拟内存耗尽

Posted

技术标签:

【中文标题】GuardMalloc 导致虚拟内存耗尽【英文标题】:GuardMalloc results in virtual memory exhausted 【发布时间】:2012-12-09 13:22:13 【问题描述】:

由于看起来内存不足或内存损坏情况,我们的应用偶尔会在现场遇到崩溃(通过 BugSense 发现),因此为了帮助我追踪它们,我启用了以下功能:

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

禁用 Guard Malloc 后,应用可以正常工作,但启用后,应用会因这些消息而崩溃。当我使用 Leaks and Allocations 工具进行分析时,没有发现任何泄漏,并且所有内存的 Live Bytes 值介于 30 MB 和 80 MB 之间(取决于它当时正在做什么)。当然,对于一个应用来说,这并不是太多的内存。

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

谢谢,大卫

【问题讨论】:

NSZombies 会导致你释放的任何东西实际上都没有被释放,因此如果你进行大量分配会耗尽内存。 禁用僵尸解决了这个问题。谢谢。 嗨,同样的问题也存在,并通过禁用僵尸解决了......谢谢。但我不明白它的影响,你能解释一下吗? @OKNC2 因为实际上并没有释放任何东西,所以内存不可避免地会被释放。 @DavidPotter 好的,谢谢您的回复。 【参考方案1】:

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

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

【讨论】:

以上是关于GuardMalloc 导致虚拟内存耗尽的主要内容,如果未能解决你的问题,请参考以下文章

避免PHP-FPM内存泄漏导致内存耗尽

maxwell提示内存耗尽怎么解决?

超大表导致允许的内存大小为 x 字节耗尽错误

将sql查询存储在列表中时PHP内存耗尽

系统内存耗尽的案例分析

如何解决PHP里大量数据循环时内存耗尽的问题