Xcode工具中的Instruments占用大量内存。

6

您好,我的问题是与内存泄漏或分配相关的。当我从Xcode运行instruments并开始测试我的应用程序时,我的iMac最终变得非常缓慢。

这使我在使用instruments时运行活动监视器,并注意到每秒钟instruments都会占用越来越多的实际内存。大约每秒100MB。

它不需要很长时间就可以消耗完我iMac的所有可用内存(2GB),然后开始滞后。

无论如何,这并不会发生在每个应用程序中。我已经下载了一些应用程序/项目并进行了相同的测试,instruments似乎只使用大约250MB的空间,而且不会急剧增加。

是否有明显错误?任何帮助都将不胜感激。

谢谢。

1个回答

5

仪器占用了很多内存。

根据你所记录的内容,你可以减少它的内存使用。例如,你可以经常指定记录什么(或不记录什么),或者降低采样频率(如果适用)。

100MB/s是异常高的。你能详细描述一下你在这段时间里正在记录的内容吗?(你使用的仪器,你记录的过程在做什么等等)。

Xcode 3使用的内存少得多-不确定Instruments是否也是如此。

通过将工具集作为32位进程运行,可以在一定程度上减少内存使用。

最后,2GB的物理内存对于Xcode + Instruments + iOS Sim来说微不足道。值得一提的是,我经常用8GB或更多的内存耗尽物理内存。幸运的是,当你想要4GB或8GB时,内存很便宜。

更新

我尝试使用Allocations、Leaks和Zombies的仪器

如果必须的话,你可以单独运行这些测试。

Allocations

如果你的应用程序没有创建大量的分配,那么单独使用allocations不应该消耗太多内存。

为了减少使用这个工具的内存,你可以禁用一些你不感兴趣的选项:

  • 不要记录每个ref count操作
  • 只跟踪活动分配
  • 禁用Zombie检测
  • 不要标识C++对象

Leaks

  • 仅在需要泄漏历史记录时才会涉及Allocations工具。

泄漏检测本身可能会消耗大量内存,因为它会扫描内存,基本上是克隆你的分配。假设你分配了100MB - 泄漏将定期暂停进程,克隆内存并扫描它以查找模式。这可能比你的应用程序消耗更多的内存。我记得,它是作为Instruments的子进程执行的。

Zombies

  • 涉及Allocations工具。

僵尸检测通常意味着参考计数记录。当调试僵尸时,最有效的方法是永远不释放它们。如果你释放它们,你只能检测到短暂的僵尸(不确定Instruments中是否有这样的选项...)。永远不释放objc分配显然会消耗更多内存。然后在进程上运行leaks将会消耗更多的内存,因为你的堆大小将变得更大-泄漏和僵尸不应该组合使用。

通过禁用其中一些选项并单独测试它们,你应该能够减少总体消耗。

  • 最新的开发者工具可能会非常不稳定。如果您遇到问题,最好使用官方发布版本。
  • 我可以仅使用分配运行osx单元测试(主要是c/c++ api),录制时每秒消耗约1MB。这似乎有些异常,但可能表明您的程序存在问题(许多瞬态分配?)。
  • 更改数据显示方式和/或电荷/焦点设置可能需要大量内存。例如,“恢复全部”可能需要几GB才能处理大样本。
  • 如果100 MB/s是准确的数字,那么我会提交一个错误报告。我知道Instruments消耗了很多内存,但即使考虑到Instruments消耗很多内存的情况下,记录空闲应用程序的负载也非常高。

祝你好运


我尝试使用Allocations、Leaks和Zombies工具,但似乎无论如何都会消耗大约相同数量的内存。一旦Instruments达到约1.7GB,它似乎就停止了,但此时它太卡了,无法正确测试我的游戏。我对可用内存有点不清楚。我的意思是在首次启动Instruments时有2GB可用,这意味着Xcode和模拟器应该包括在内。我有4GB总内存,这是一台相当新的iMac。我只运行了我的iPhone游戏,而且我甚至不需要做任何事情,只需坐在第一个菜单屏幕上。 - Tasik
我知道在我的旧iMac上使用Xcode 3时没有这个问题。但我不确定是Xcode还是我对游戏所做的更改引起的。但我会尝试一些方法和你建议的,并回来看看。谢谢。 - Tasik
我已经升级到了12GB的内存。它似乎保持在每秒100MB的速度,需要大约一分半钟的时间来消耗10GB的数据,然后事情又变得非常缓慢。无论如何,非常感谢你。如果我发现其他问题,我会继续添加的。 - Tasik
不客气。如果你能轻松地重现并记录下来,我肯定会向苹果提交一个Bug报告。祝你好运。 - justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接