问题标签 [memory-profiling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
232 浏览

.net - 什么样的泄漏会导致 WCF 中 TimeBoundedCache.ExpirableItem 的实例泄漏?

我使用 .NET Memory Profiler 分析了我的 WCF 应用程序,发现存在 TimeBoundedCache.ExpirableItem 和 Byte[] 类型的实例泄漏:

在此处输入图像描述

比较是使用两个间隔为 1 小时的快照进行的,不同时间的比较也表明两种类型的数量一直在增加。除了这两种类型之外,没有明显的泄漏。

分配堆栈如下所示: 在此处输入图像描述

有谁知道可能是什么原因造成的?

0 投票
1 回答
398 浏览

haskell - 内存分析改变内存使用(为了更好)

这实际上是这个问题的后续问题。我设法让分析工作,问题似乎真的是懒惰的评估。

我使用的数据结构是 a Map Int (Map Int Text),其中Text来自Data.Text。问题是,构建此地图的函数会产生巨大的冲击。处理大约 3 MB 的输入文本时,程序需要超过 250 MB 的内存。

现在到这个问题的真正目的:

要获取此数据结构中的字符数量,请使用以下函数:

不漂亮,但它完成了工作。在创建 TextResource 之后,我在 main 函数中使用了这个函数。有趣的是,当我使用 RTS 选项分析程序-hr-hc一段时间后内存使用量下降到 70 或 50 MB 时,这完全没问题。

不幸的是,这仅在使用分析选项和totalSize功能时才有效 - 没有它们,它会回到 250 MB。

我把程序(<70行)连同一个测试文件和一个cabal文件一起上传了,你可以自己试试:链接

test.xml 是一个生成的 XML 文件,应该放在可执行文件目录中。构建,cabal configure --enable-executable-profiling然后cabal build就足够了(如果您安装了所需库的分析版本)。

+RTS -hc您可以在运行程序一次和一次不运行时看到变化。

如果有人可以运行该程序,我会非常棒,因为我真的被困在这里。我已经尝试deepseq在几个地方放置,但没有任何效果(好吧,除了使用分析选项)。

编辑:

然而,分析确实表明,只使用了大约 20MB 的堆,所以在我的评论中,我责怪 GHC 没有像你想要的那样释放尽可能多的 GC 托儿所内存。

谢谢,这为我指明了正确的方向。事实证明,您可以告诉 GHC 执行垃圾收集 ( performGC ),它在对地图进行深度处理后效果非常好。尽管我猜不推荐使用 performGC,但它似乎是适合这里工作的工具。

Edit2: 这就是我更改主函数的方式(+ deepseqing buildTextFile 的返回):

0 投票
3 回答
489 浏览

c++ - 类中的内存使用 - 将双精度转换为浮点并没有按预期减少内存使用

我正在初始化数百万个属于以下类型的类

模板的目的是使用户能够选择floatdouble精确,其想法是node<float>占用更少的内存(RAM)。

但是,当我切换doublefloat我的程序的内存占用时,它并没有像我预期的那样减少。我有两个问题,

  1. 编译器/操作系统是否有可能保留比我的浮点数所需的更多空间(甚至将它们存储为双精度)。如果是这样,我该如何阻止这种情况发生 - 我在 64 位机器上使用带有 g++ 的 linux。

  2. 是否有一个工具可以让我确定所有不同类使用的内存量?(即某种内存分析) - 以确保内存没有被我没有想到的其他地方吞噬。

0 投票
1 回答
485 浏览

objective-c - 如何追踪内存峰值?(那是 ap 的峰值,而不是 l。)

我有一个信息亭应用程序,它基本上显示了一堆幻灯片,上面有各种信息。一年多前,我最初开始编写此代码,当时我开始使用 Objective-C 和 iOS 开发。我发现我现在的代码风格比以前干净得多,而且我更有经验,所以我决定从头开始重写。

我使用 Allocations 工具运行我的应用程序以查看内存使用情况。考虑到这是一个信息亭应用程序,一切都需要顺利运行,没有泄漏。(当然,所有应用程序都需要在没有泄漏的情况下运行,但信息亭应用程序使这一目标变得更加重要。)我看到了一些有趣的结果,所以我也运行了旧版本的代码。

运行旧版本的代码,我看到几乎甚至运行在大约 1.15 兆字节的内存使用量。一切似乎都在必要时被分配和释放。然而,在我的新实现中,我看到了一些不同的东西。内存使用量在很小的“高原”中不断跳跃,然后最终似乎达到了大约 1.47 兆字节的使用量峰值。以下是运行 10 多个小时后新的分配报告的样子:

在此处输入图像描述

我担心有几个原因。

  1. 运行开始时的奇数模式。
  2. 分配似乎达到了 1.47 兆字节的峰值,但在一夜之间运行它表明它实际上会随着时间的推移慢慢地使用越来越多的内存。这不可能是一件好事。

旧项目和新项目之间有几个显着差异。

  • 旧项目使用 Plists 作为后备存储(我手动读取和写入 plist 文件。)新项目使用 Core Data。

  • 新项目实现了一个在旧项目没有的每个“幻灯片”上调用的库。我会更关心这个库,除了我写了它并且我检查了它以确保我发布了所有东西,并且只在手动发布不可能的地方自动发布。

  • 这两个类都使用工厂类来创建幻灯片。在旧项目中,工厂类是一个单例。我认为把它变成一个普通的类将有助于解决内存问题,因为单例从未被释放。(因此它的 属性没有被释放。在新项目中,工厂类正在被释放,所以我不确定为什么它仍然占用所有内存(如果这是导致问题的原因。

  • 旧项目在各个地方都使用了字符串常量。新代码对同一件事使用了大量的枚举。(新代码通常使用更多常量。)

我可以做些什么来追踪内存峰值?当应用程序丢弃它正在使用的任何东西时,内存都被应用程序清理了,但它似乎在应用程序终止之前并没有丢弃东西。

如果有人能帮助我指出正确的方向,我将不胜感激。

编辑:

看起来峰值是由对 KosherCocoa 库的调用引起。如果有人介意看一下它并告诉我在内存管理方面我做错了什么,我将非常感激。

0 投票
2 回答
1621 浏览

java - 如何在 java 中理解这个 NetBeans 内存配置文件会话(可见内存泄漏)?

我是 Java 的初学者,想知道如何在 NetBeans 中分析这个内存配置文件会话以及如何观察它以帮助搜索内存泄漏?

什么是“实时字节”?我可以看到,当我对所有活动字节求和时,我只会得到 Java 应用程序系统内存使用的一小部分。为什么没有关于每种对象类型的分配字节的信息?“分配的对象”的价值不断增长是内存泄漏的迹象吗?

这是具有大量并发线程和 http 连接的应用程序。我检查了线程并且它们工作正常 - 我的意思是同时不超过 20 个线程。我使用 JBOSS Netty 进行 http 连接,使用 jSoup 来解析 HTML。

netbeans 分析器

这种内存泄漏是由太多分配的 ParseError 对象引起的吗?或者我应该使用字节创建堆栈跟踪来搜索内存泄漏?

其他资源:

netbeans 分析器

netbeans 分析器

编辑:

我已将 HTML Cleaner 添加到我的项目中。这导致我不再看到任何解析器错误。内存泄漏增长现在慢了大约 3-4 倍。在达到 800MB 的内存使用后,应用程序崩溃了,我可以在 NetBeans 中查看堆。结果:

堆

注意:我没有在我的应用程序中创建任何 LinkedHashMap,所以它必须由其他库创建。TagNode 是一个在“HTML Cleaner”清理后保存清理过的 html 的对象。我的应用程序中只有一个 TagNode 对象,它是 netty http 响应处理程序中的局部变量(由 messageReceived 调用)。

0 投票
2 回答
1102 浏览

windows-phone-7 - 内存分析工具和方法

我正在尝试分析我们的 Windows Phone 7 应用程序的内存使用情况。在浸泡测试后查询该ApplicationPeakMemoryUsage属性会产生约 90Mb 的值。System.GC.GetTotalMemory(true)此时返回 ~11Mb,因此余额必须是非托管内存。该应用程序没有明确分配任何非托管内存,因此我假设平衡是 GPU 资产、音频和应用程序二进制文件本身。

通过围绕调用ContentManager.Load()和 GPU 资源分配(new RenderTarget2D()等)。代码类似于

我能够获得渲染缓冲区、纹理/音频资源等使用的内存的近似数字。这些在我的应用程序中总计约 45-50Mb。ApplicationCurrentMemoryUsage在初始化开始时立即产生不到 10Mb。减去 11Mb 托管堆(这部分是重复计算的!),这留下约 20Mb 下落不明。

Mango 内存分析器跟踪总数,但只分解托管堆的分配。除了 GPU 资源、音频和应用程序二进制文件本身之外,还有什么可能会使用大量非托管内存?有没有比我现在做的更明智的跟踪记忆的工具或方法?

0 投票
1 回答
243 浏览

winforms - winform 应用程序中常见的内存泄漏问题有哪些?

我尝试使用 Ants Memory Profiler 来掌握。我遇到的问题是我没有一个简单的应用程序存在内存泄漏。

我使用了 Redgate (QueryBee) 的样本,但这是为了我的口味而设计的。必须有一个更简单的应用程序。

我试图弥补一个,但它不工作。它不起作用意味着:我没有内存泄漏。我读到了调用 ShowDialog 而不处理被调用的表单会让我发生内存泄漏,但这里不是这种情况。

我使用 VS2010 和 .NET 4.0

我对非常常见的问题特别感兴趣。

这是我到目前为止所拥有的。你能给我一个内存泄漏吗?:

主窗体

子表单

0 投票
3 回答
11262 浏览

python - 是否有任何适用于 Python3 的工作内存分析器

在 Python 2 中有几个工具,但一切似乎都过时了。

我找到了 PySizer 和 Heapy,但一切似乎都是面向 Python2 的,并且需要付出很多努力才能移植。

objgraph 很有趣,但仍然不是一个完整的分析器

使用的是哪个工具?

0 投票
1 回答
485 浏览

.net - 为什么这个 DataGridView 仍然被 UserPreferenceChangedEventHandler 引用?

我将使用 VS2005 构建的 .NET 2.0 Winform 应用程序升级到 .NET 3.5 SP1。由 VS 2008 构建

应用程序在 .NET 2.0 中存在由 UserPreferenceChangedEventHandler 引用的 ToolStripControl 引起的内存泄漏。

升级到 .NET 3.5 解决了这个问题。我仍然有 DataGridViews 的问题。

它们也被 UserPreferenceChangedEventHandler 引用。

DataGridViews 是否有一些常见问题会阻止包含它们的表单不被垃圾收集器回收?

实例保留图

0 投票
4 回答
1765 浏览

.net - 如何在我们的测试项目上运行内存分析器?

全部,

我们的测试项目有问题抛出 OOM 异常,我怀疑问题出在我们身上。我们以某种方式持有引用,并且永远不会释放内存。

所以,我想运行一个内存分析器,看看这是在哪里发生的。

设置分析器工具很简单,只需将工具指向 nunit-console.exe 并运行我们的测试项目并拍摄一些快照。

不幸的是,这不起作用。我已经尝试了 SciTech 和演示的 ANTS,并且都高兴地报告说 NUnit 控制台程序集/appdomain/whatever 没有增长。伟大的。任务管理器中的进程稳步增长到 450MB,但内存分析器报告它根本没有增长。

伟大的。

我用谷歌搜索过,我看到了一些(特定于工具的)关于如何处理单元测试项目的简单说明。我已经尝试过这些东西,但它们没有用。我尝试过使用 NUnit 的 appdomain/assembly 设置,但到目前为止无济于事。

所以。

有没有人真正成功地针对测试项目(任何类型的——我们使用 NUnit,但我敢打赌它对于任何 .NET 自动化测试框架都是一样的)运行内存分析器?对于任何 .NET 测试框架?如果是这样,哪些说明对您有用?