在服务器更新后,一个旧应用程序开始大量消耗内存。内存使用似乎会无限上升,直到程序挂起。
根据FastMM4和EurekaLog的分析,除了28字节外,没有内存泄漏,因此我假设在应用程序关闭时所有内存都被释放。
有没有适合跟踪这种内存问题的工具或策略?
在服务器更新后,一个旧应用程序开始大量消耗内存。内存使用似乎会无限上升,直到程序挂起。
根据FastMM4和EurekaLog的分析,除了28字节外,没有内存泄漏,因此我假设在应用程序关闭时所有内存都被释放。
有没有适合跟踪这种内存问题的工具或策略?
LogMemoryManagerStateToFile
:
为了在运行时发现泄漏,您只需要执行以下步骤:添加了LogMemoryManagerStateToFile调用。此调用将内存管理器状态的摘要记录到文件中:分配的总内存、开销、效率以及按类和字符串类型分配的内存的细分。此调用可能对捕获不一定泄漏但存在时间比应该长的对象很有用。
LogMemoryManagerStateToFile('memory.log', '')
请注意,如果某个 DLL 消耗了内存,则您可能无法使用 (3) 来查看其内存使用情况。请使用 (2)。
通过分析应用程序的内存使用情况和执行的任务,您可能会发现是什么导致了内存使用量的增加。
你有没有想过那个导致IDE泄漏的问题...它太大了!!!
在我的情况下(2GB的RAM),我做了以下操作... 1. 打开IDE 2. 最小化它近六个小时 3. 观察物理内存的使用情况
结果: 当IDE打开时(记住我也测试了最小化它的情况),它会越来越多地占用RAM...直到没有更多的可用RAM。 它占用了所有2GB的RAM + 所有页面文件硬盘空间(我将其配置为最大4GB) 不到六个小时(在IDE上什么都不做)它就试图使用超过6GB。
这就是由IDE引起的内存泄漏...我没有在IDE上输入任何字母,没有编译任何东西,甚至没有打开任何项目...只是打开IDE并将其最小化...让计算机保持不动约六个小时,IDE就会消耗6GB的内存。
当然,在此之后,IDE开始出现烦人的SystemOutOfMemory消息...我必须杀掉它...然后所有的6GB都被释放了!!!
这个问题什么时候才能得到解决?
请注意,我已经应用了所有的补丁,我也测试了不应用每个补丁/热修复程序等的情况...
我最好的解决方案是禁用工具中的某些选项,比如下划线错误代码等... 所以为什么这个选项会有影响... 我没有在 IDE(测试时)输入任何内容... 如果我禁用了它,内存泄漏就会大大减少...
当然,如果我使用 IDE (在打开的项目上编写代码)而不进行编译/运行... 事情会变得更加糟糕... 内存泄漏会在不到一个小时内达到6GB,有时在复制/粘贴源代码15分钟后就会发生。
看起来短时间内不会有解决方案!!!
所以我找到了下一个完美的解决方案: -每15分钟或更短时间关闭 IDE 并重新打开它
丑陋的解决方案,我知道... 但它有效!!!
memory.log
显示没有不断增长的内容,应该做些什么? - SOUser