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

java - 仅在 Windows 上从 JRE 获取堆转储

我们的产品在我们客户的服务器上运行,Windows 上只有一个 JRE(无 JDK)。

我知道我可以通过标志在 OutOfMemoryError 上获得堆转储。

但是,有没有办法主动从 JRE JVM 进程中获取堆转储?

我计划获得一些健康的堆转储,并将它们与在 OutOfMemoryError 上获得的堆转储进行比较。

最好,我应该可以要求客户下载这个工具/实用程序,然后在服务器上运行它以随意获取堆转储。

我尝试了 jvisualvm但是 jvisualvm 不会列出我们的产品 JVM。它只会列出当时运行的一些 JVM,而不是当时运行的所有 JVM。PLUS jvisualvm 非常笨重。

PS:是否有可以在 JVM 主机上执行以转储堆的 3rd 方实用程序?此外,客户此时无法升级 JRE。并且上一个问题的答案都没有被选为答案!

谢谢,

0 投票
1 回答
956 浏览

java - Java 程序运行时非堆内存使用的细微差别

我有一个用于 Java 中的多线程回显服务器的简单代码(它将收到的任何内容返回给客户端)。我正在分析各种资源,包括非堆内存使用情况。我知道 JVM 的非堆内存也是在 JVM 启动时创建的,但是,它存储每个类的结构并包括调用堆栈、由本机代码分配的内存(例如用于堆外缓存)、元空间以及内存由 JIT 编译器使用(编译的本机代码)。但我有两个主要问题:

1)随着时间的推移,非堆内存使用量略有增加。增加很小,但是是什么导致内存使用量略有增加?

2)虽然随着通信客户端数量的增加,非堆内存使用量几乎相同,但如果我们放大很多,同样我们会注意到随着客户端数量的增加而略有增加。主要原因是什么?我猜这可能是由于新线程需要更多空间,但是这些线程做了什么来导致这种轻微的增加?

3) 我们也注意到与上面 2 中堆内存的相同差异。但是,差异要大得多。原因是什么?我的猜测是增加了存储消息所需的缓冲区大小。

在此处输入图像描述

0 投票
1 回答
289 浏览

c++ - 在不安装的情况下使用 gperftools/Heaptrack

我正在尝试在 unix 平台上对 C++ 应用程序进行堆分析。我已经尝试过 valgrind 的地块,但它使应用程序非常缓慢并影响应用程序的行为。

我正在寻找其他选项并遇到gperftoolsheaptrack。尽管这些对于我的问题来说是可行的解决方案。但是我在这里有限制,我没有足够的权限来安装这些工具。

有什么方法可以设置 gperftools 或 heaptrack 而无需在 unix 中安装它们?

提前致谢

0 投票
1 回答
33 浏览

javascript - 支配者对象如何可能缺少对其支配对象的引用?

我正在浏览 chrome 开发工具的文档。在这个关于内存分析的页面上,它说:

Dominator 对象包含一个树结构,因为每个对象都只有一个支配者。一个对象的支配者可能缺乏对其支配的对象的直接引用,也就是说,支配者树不是图的生成树。

我无法得到它,因为父对象如何在不引用子对象的情况下成为子对象的支配者。我的意思是在代码中的某个地方它会这样写:

var parent = {child : child}; var child = {name : 'child'};

就这样,父母成了孩子的主宰。

但是现在它说支配者可能缺少对孩子的引用。谁能给我这个案例的示例情况。

0 投票
1 回答
254 浏览

javascript - 堆快照大小远小于使用的 RAM 量

我正在通过其任务管理器检查 Chrome 中特定选项卡的内存消耗。它向我展示了相当大量的 RAM 使用:

在此处输入图像描述

然而,当我在开发人员工具中拍摄堆快照时,它显示的大小要小几倍:

在此处输入图像描述

这个怎么可能?

0 投票
1 回答
205 浏览

jprofiler - 在 JProfiler 中为远程连接设置触发器

我将 JProfiler 10 通过Quick Attach.在此处输入图像描述

有没有办法启用触发器以在计时器上保存快照?到目前为止,我一直未能成功地让它在远程连接上工作。

它在本地连接上按预期工作。

0 投票
1 回答
601 浏览

memory - 堆和堆栈使用 ARM Cortex M3、M5

我想在基于 Renesas S3A7 ARM M3 的控制器上运行某些数学算法时测量堆栈和堆的使用情况。有什么方法或程序可以测量执行某些功能时使用的最大内存吗?

0 投票
0 回答
1648 浏览

c# - 套接字上的 OverlappedData 内存泄漏

我正在使用异步套接字使用 MSDN Docs 在客户端和服务器之间建立连接:

https://msdn.microsoft.com/en-us/library/fx6588te(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.100).aspx

我从同步开始,后来使用异步。在成功完成我的第一个应用程序后,我开始在 GitHub 存储库中搜索更多代码和更多解释。我找到了这个:

https://github.com/perrybutler/csharpsockets

没关系,它工作,但它有内存泄漏,我开始分析,我发现了这个:

在此处输入图像描述

(可能的内存泄漏)

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

(到处都有检测到循环的语句。我想知道它们的意思。我想应用程序或 GC 迫使它停止并将其标记为循环)。

我认为有些不对劲,因为如果您发送 1MB 的数据,内存应该只会增加 1MB,但稍后会减少。但这并没有发生。我开始在不引起异常的情况下处理所有内容,但这并没有太大帮助。

我开始在 StackOverflow 和其他地方搜索这个,我发现了这个:

.NET 没有可靠的异步套接字通信?

但是,我真的不明白那里在讨论什么。

我还发现了这个:

https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

我读到套接字需要确认它何时已经在 BeginSend/EndSend 和 BeginReceive/EndReceive 之间发送数据,因为如果没有,它会等到这个,然后开始增加内存(直到检测到循环?)

也许通过我分享的 CodeProject 我应该得到这个?我不知道,我必须从哪里开始。

我需要一个指南。我将尝试分析 CodeProject。

0 投票
0 回答
40 浏览

java - JvisualVM:奇怪的应用程序行为

这是我来自 jvisualvm 的图形(应用程序工作 2 小时、20 小时、22 小时后)。我无法解释这种行为。请帮我提供你的建议。

我没有看到内存泄漏,但 CPU 使用率增长缓慢。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
0 回答
1659 浏览

go - go pprof heap profile vs top mem_usage

我正在运行 go 应用程序并使用 pprof 来获取它的堆配置文件,如下所示:

结果,我得到了这个:Showing nodes accounting for 507.98MB, 99.41% of 510.98MB total。但我不知道它首先从哪里得到这个 507.98MB。当我使用 检查当前内存使用情况top时,它显示我的应用程序仅使用 200MB 内存(top命令结果中的 RES 值)。有人可以解释堆配置文件显示的总 in_use 内存和给出的 mem_usage 之间有什么区别top吗?