问题标签 [heap-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 回答
5797 浏览

google-chrome - Chrome堆分析器中对象标题的黄色背景是什么意思?

试图了解 Chrome 开发人员工具中的堆分析器。我在快照中看到了几个可到达的对象,其中一些具有黄色背景,而另一些则没有。这是什么意思?有什么不同?

在这种情况下,颜色图例并不完全有用,因为它本身具有黄色背景 (wtf)。

堆快照

0 投票
2 回答
2751 浏览

javascript - d3.js:正交旋转优化

我使用正交投影制作了一张地图,并尝试提高性能,因为旋转不平滑(大约 6-7FPS)。

这是一张使用 topojson 文件 (world-100m) 构建的世界地图。我需要与国家互动并对它们进行着色,因此svg:path 与国家一样多

加载后,我使用 d3.timer 启动了自动旋转功能:

为了理解它为什么这么慢,我在 Chrome 中做了一个个人资料记录,结果如下:

铬分析 1/2 铬分析 2/2

似乎Animation Frame Fired是缓慢的部分,但我真的不知道它是什么。当我打开它时,有 2 个 GC 事件(垃圾收集器?)但周围什么都没有……你知道在这 90 毫秒期间发生了什么吗?

任何提高性能的提示都非常受欢迎:-)

提前感谢!

顺便说一句,它看起来像这样: 地图概览

0 投票
2 回答
8711 浏览

memory-leaks - Go(lang):如何使用 PPROF 堆配置文件来查找内存泄漏?

我正在尝试使用 pprof 来验证内存泄漏。

任何人都可以解释如何阅读您在以下位置找到的堆配置文件: http://localhost:6060/debug/pprof/heap?debug=1

此外,web在启动后键入命令go tool pprof http://localhost:6060/debug/pprof/heap会产生一个空的 .svg 文件是否正常?

非常感谢

0 投票
0 回答
891 浏览

google-perftools - 如何在 google-perftools 堆分析器的堆栈跟踪中显示符号

我们在 TDD 环境中使用 google-perftools 堆分析器。最后我们得到堆转储,我们可以使用 pprof 来查看热点。它显示了符号,但几乎没有提供有关如何在堆栈中到达泄漏的信息。事实上,我可以看到输出中没有任何组织。

最大泄漏的堆栈跟踪在运行时显示,但不显示任何符号。我们正确设置了 PPROF_PATH 环境变量,但它没有任何效果。我们如何启用它?

0 投票
1 回答
162 浏览

javascript - 使用 chrome 开发工具进行 JavaScript 分析

每次在对网页进行一些操作后拍摄堆快照时,大小都会增加 3 到 4 MB。如果我继续执行 10 到 15 次,堆快照的大小将增加到 100 MB。它是否证明我的应用程序存在内存泄漏?

我执行的操作是每次产生相同结果的搜索操作。

0 投票
2 回答
127 浏览

c++ - 回归测试如何证明是否调用了 VirtualAlloc?

我正在为正在优化的(Win7)C++ 例程编写回归测试,该例程以前释放并重新分配了许多巨大的缓冲区:内存流失。我想证明,在测试期间,程序不会分配任何大内存区域(比如 16M 或更大),而是有效地重新使用在初始化时分配的内存。归结为,如果调用 VirtualAlloc 以获取一些大区域(例如 16M),则测试应该失败。

有没有一种优雅的方法来计算对 Windows VirtualAlloc 的调用的统计信息?这将成为永久自动回归测试套件的一部分,因此使用外部工具或修改下游代码是不可行的。

检查提交的总内存不太合适,因为我想断言例程不再搅动(释放和重新分配缓冲区。)

0 投票
1 回答
12148 浏览

performance - 如何解释 pprof 输出?

我正在尝试分析一个用 go 编写的应用程序,它显然使用了大约 256 个虚拟内存(使用检查ps aux)。我正在尝试使用pprof包并查看哪些函数分配/消耗了大部分内存,但结果对我来说毫无意义。pprof top似乎只列出了运行时函数。有人可以帮我理解这些数据吗?

去工具 pprof http://localhost:6060/debug/pprof/heap

http://localhost:6060/debug/pprof/heap?debug=1

http://localhost:6060/debug/pprof/goroutine?debug=1

4584 是应用程序的 PID。猫 /proc/4584/状态

0 投票
1 回答
158 浏览

javascript - 相同的 chrome 对象 ID 是否暗示堆分析器中的相同对象?

我正在解决我们的一个网络应用程序的内存问题。我正在使用 Chrome 的堆分析器。我想确保我非常明确地理解一些东西,因为我正在对这些信息做出假设。

铬调试器

上面堆配置文件屏幕截图中的@符号。我想确保我理解得一清二楚:相等的对象 ID 意味着相同的对象

a.objectId == b.objectId implies a same as b a.objectId == b.objectId implies NOT a same as b

因此,如果我有两个我期望实际上是同一事物的对象,但它们的对象 ID 不同,这是否意味着发生了意外的副本?这意味着我可以在我的代码中找出我可能会在哪里创建不必要的重复项?

文档似乎是这么说的,但他们并没有明确地说出来,继续说为什么他们有一个对象 id,而不是它代表什么。

这是一个对象 ID。显示对象的地址是没有意义的,因为在垃圾回收期间会移动对象。这些对象 ID 是真实的 ID——这意味着,它们在拍摄的多个快照中持续存在并且是唯一的。这允许在堆状态之间进行精确比较。维护这些 ID 会增加 GC 周期的开销,但它仅在拍摄第一个堆快照后启动——如果不使用堆配置文件则没有开销。

我明白了。但我需要把它重新装回我的 C 程序员头脑中。我意识到,即使使用本机堆,指针值也会随着时间而改变。我可以有效地将对象 ID 视为随时间变化的唯一指针地址吗?

0 投票
7 回答
5508 浏览

java - 使用过多内存的休眠关联

我有一个表“类”,它链接到表“学生”和“教师”。一个“班级”通过外键关系链接到多个学生和教师。

当我使用休眠关联并获取大量实体(尝试 5000 个)时,我发现它占用的内存是我仅使用外键占位符的 4 倍。休眠关联有问题吗?

我可以使用任何内存分析器来找出占用过多内存的原因吗?

架构是这样的:

案例 #1 - Hibernate 关联

1)在 Class Entity 中,将学生和教师映射为:

2)在学生和教师中,将班级映射为:

使用的查询:

然而,这需要大量的内存。

案例 #2- 删除关联并单独获取

1)类实体中没有映射

2)只有学生,教师外键的占位符

使用的查询:

注意 - 仅显示小鬼。部分代码。我正在通过 JAMM 库测量获取的实体的内存使用情况。

我还尝试将查询标记为 readOnly 在 case #1 中,如下所示,这并不能极大地提高内存使用率;只是很少。所以这不是解决办法。

以下是按大小排序的堆转储快照。看起来由休眠维护的实体正在造成问题..

用于休眠关联程序的 Heapdump 快照 用于休眠关联程序的 Heapdump 快照

使用单独实体获取的堆转储快照 使用单独实体获取的堆转储快照

0 投票
1 回答
3899 浏览

go - 解释 pprof 堆图

当我使用 pprof 分析堆时,我得到以下信息:

在此处输入图像描述

但是,我不清楚如何解释这种可视化。尤其是:

“箭头旁边的记忆意思是_____,盒子里面的记忆意思是______。所以当一个盒子有多个箭头时,它意味着____,当它有多个箭头时,它意味着____”。