问题标签 [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.
java - 仅在 Windows 上从 JRE 获取堆转储
我们的产品在我们客户的服务器上运行,Windows 上只有一个 JRE(无 JDK)。
我知道我可以通过标志在 OutOfMemoryError 上获得堆转储。
但是,有没有办法主动从 JRE JVM 进程中获取堆转储?
我计划获得一些健康的堆转储,并将它们与在 OutOfMemoryError 上获得的堆转储进行比较。
最好,我应该可以要求客户下载这个工具/实用程序,然后在服务器上运行它以随意获取堆转储。
我尝试了 jvisualvm但是 jvisualvm 不会列出我们的产品 JVM。它只会列出当时运行的一些 JVM,而不是当时运行的所有 JVM。PLUS jvisualvm 非常笨重。
PS:是否有可以在 JVM 主机上执行以转储堆的 3rd 方实用程序?此外,客户此时无法升级 JRE。并且上一个问题的答案都没有被选为答案!
谢谢,
java - Java 程序运行时非堆内存使用的细微差别
我有一个用于 Java 中的多线程回显服务器的简单代码(它将收到的任何内容返回给客户端)。我正在分析各种资源,包括非堆内存使用情况。我知道 JVM 的非堆内存也是在 JVM 启动时创建的,但是,它存储每个类的结构并包括调用堆栈、由本机代码分配的内存(例如用于堆外缓存)、元空间以及内存由 JIT 编译器使用(编译的本机代码)。但我有两个主要问题:
1)随着时间的推移,非堆内存使用量略有增加。增加很小,但是是什么导致内存使用量略有增加?
2)虽然随着通信客户端数量的增加,非堆内存使用量几乎相同,但如果我们放大很多,同样我们会注意到随着客户端数量的增加而略有增加。主要原因是什么?我猜这可能是由于新线程需要更多空间,但是这些线程做了什么来导致这种轻微的增加?
3) 我们也注意到与上面 2 中堆内存的相同差异。但是,差异要大得多。原因是什么?我的猜测是增加了存储消息所需的缓冲区大小。
c++ - 在不安装的情况下使用 gperftools/Heaptrack
我正在尝试在 unix 平台上对 C++ 应用程序进行堆分析。我已经尝试过 valgrind 的地块,但它使应用程序非常缓慢并影响应用程序的行为。
我正在寻找其他选项并遇到gperftools和heaptrack。尽管这些对于我的问题来说是可行的解决方案。但是我在这里有限制,我没有足够的权限来安装这些工具。
有什么方法可以设置 gperftools 或 heaptrack 而无需在 unix 中安装它们?
提前致谢
javascript - 支配者对象如何可能缺少对其支配对象的引用?
我正在浏览 chrome 开发工具的文档。在这个关于内存分析的页面上,它说:
Dominator 对象包含一个树结构,因为每个对象都只有一个支配者。一个对象的支配者可能缺乏对其支配的对象的直接引用,也就是说,支配者树不是图的生成树。
我无法得到它,因为父对象如何在不引用子对象的情况下成为子对象的支配者。我的意思是在代码中的某个地方它会这样写:
var parent = {child : child};
var child = {name : 'child'};
就这样,父母成了孩子的主宰。
但是现在它说支配者可能缺少对孩子的引用。谁能给我这个案例的示例情况。
memory - 堆和堆栈使用 ARM Cortex M3、M5
我想在基于 Renesas S3A7 ARM M3 的控制器上运行某些数学算法时测量堆栈和堆的使用情况。有什么方法或程序可以测量执行某些功能时使用的最大内存吗?
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 和其他地方搜索这个,我发现了这个:
但是,我真的不明白那里在讨论什么。
我还发现了这个:
https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
我读到套接字需要确认它何时已经在 BeginSend/EndSend 和 BeginReceive/EndReceive 之间发送数据,因为如果没有,它会等到这个,然后开始增加内存(直到检测到循环?)
也许通过我分享的 CodeProject 我应该得到这个?我不知道,我必须从哪里开始。
我需要一个指南。我将尝试分析 CodeProject。
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
吗?