问题标签 [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 投票
3 回答
2576 浏览

c++ - 如何分析一组 C++ 类的内存消耗?

我正在尝试使用 gprof 计算我的(C++)程序的内存消耗。该程序没有 gui,它完全基于 cli。

现在,我是 gprof 的新手,所以我阅读了一些教程,它们教会了我如何运行 gprof 并发现时间消耗。

但是,我需要找出一组特定类的内存消耗。假设有一个程序有多种类型,A, ..., Z. 现在我想运行我的程序并查看类的对象使用了多少累积内存A, E, I, O, U(例如)。

你们有什么想法或指示我可以如何完成这项任务吗?
我不是专门考虑 gprof,我对任何可以完成工作的 (fos) 软件持开放态度。

当然,我已经在 google 和 stackoverflow.com 上搜索过这个问题的任何答案,但是要么我使用了错误的关键字,要么没有人遇到这个问题。

编辑:关于手动执行此操作的建议很明显。当然,我可以将它编码到应用程序中,但它涉及大量我不想更改的类。另外,我想知道总内存消耗,所以我不能只计算所有创建的对象,因为我必须单独跟踪对象的大小。

Edit2:我修改了DeadMG 的建议,我只需要继承它。它工作得很好,所以,如果有人有类似的问题,试试这个。

地图查找有点讨厌,我承认,但我没有勇气为每个类存储迭代器。主要问题是您必须为每个计数类显式初始化它。如果您知道如何做得更好,请告诉我如何做。

0 投票
1 回答
228 浏览

java - 测量 Web 应用程序会话资源消耗

我有这个使用 Wicket、Guice 和 JPA 创建的 Web 应用程序。我想就应用程序的资源消耗向我的客户提供建议,以便我也可以就购买的最佳硬件向他提供建议。测量每个会话的内存和 CPU 消耗以及网络带宽要求的最佳方法是什么?是否有进行此类测量的工具?

0 投票
1 回答
258 浏览

python - Google App Engine Apptrace 错误

我正在尝试使用 Apptrace分析我的 GAE 应用程序 当我尝试这样做时,我收到以下错误

如果我的代码中有一个类对象,则会出现错误。我应该改变什么?

0 投票
4 回答
3571 浏览

python - 如何在 Python 中分析多线程程序的内存?

有没有办法在 Python 中分析多线程程序的内存?

对于 CPU 分析,我使用 cProfile 为每个线程创建单独的分析器统计信息,然后将它们组合起来。但是,我找不到使用内存分析器执行此操作的方法。我正在使用大量。

有没有办法像cProfile一样将统计数据组合在一起?或者您会建议哪些其他内存分析器更适合此任务。

有人问了一个相关的问题来分析多线程程序的 CPU 使用情况:如何在 Python 中分析多线程程序?

还有另一个关于内存分析器的问题:Python memory profiler

0 投票
2 回答
3097 浏览

r - R中的内存分析 - 用于总结的工具

R 有一些用于内存分析的工具,例如 Rprofmem()Rprof()带有选项"memory.profiling=TRUE"tracemem(). 最后一个只能用于对象,因此对于跟踪对象被复制的次数很有用,但不提供基于函数的概述。Rprofmem应该能够做到这一点,但即使是最简单的函数调用的输出也会lm()给出超过 500 行的日志。我试图弄清楚Rprof("somefile.log",memory.profile=T)实际上做了什么,但我不认为我真的明白了。

我能找到的最后一个是Thomas Lumley 的这条消息,他这么说,我引用:

我还没有工具来总结输出。

那是在 2006 年。现在有没有可能基于with set TRUE 或任何其他工具Rprofmem()的神秘输出来提供一些不错的摘要?Rprof()memory.profile

0 投票
5 回答
3550 浏览

java - 如何在代码中分析 JVM 内存?

我正在编写一个无法在 Eclipse 中测试的 servlet,我需要在服务器上运行。我想做内存分析并查明任何泄漏。所以,我认为我需要编写可以告诉我当前内存使用情况的调试语句。有人可以向我指出有关如何执行此操作和/或 JDK 中的哪些类执行此操作的良好参考吗?

请注意,我不能使用“Eclipse MAT”。

0 投票
1 回答
3800 浏览

android - 如何使用 TraceView 对 Android 应用程序进行内存分析

将此引用到我的应用程序的内存分析,当我TraceView使用我的跟踪文件启动时,TraceView 窗口上显示了几种颜色和项目。

那么我怎样才能理解内存泄漏的位置,以及颜色的含义。

0 投票
1 回答
2292 浏览

python - numpy 的内存分析器

我有一个numpy脚本 - 根据top- 正在使用大约 5GB 的 RAM:

是否有内存分析器可以让我了解占用大部分内存的对象?

我试过了heapy,但guppy.hpy().heap()给了我这个:

出于某种原因,它只占 5GB 中的 12MB(大部分内存几乎肯定被numpy阵列使用)。

关于我可能做错了heapy什么或我应该尝试哪些其他工具(除了这个线程中已经提到的那些)的任何建议?

0 投票
2 回答
1537 浏览

.net - 追查 .NET 4.0 Induced GC 的来源

我正在使用 PerfMonitor.exe ( http://bcl.codeplex.com/wikipage?title=PerfMonitor ) 来追踪使用一些第三方库的 .NET 4.0 应用程序的一些 .NET 性能问题,其中一些是本机代码.

当我运行 Perfmonitor GCTime 报告时,它会列出各个 GC 并以多种方式对它们进行分类。报告中的一列称为“原因”。一些 GC 有 Reason="Induced",而另一些有 Reason="SmallAlloc"。

我假设标记为“SmallAlloc”的 GC 是由常规分配(New Object())引起的,而标记为“Induced”的 GC 是由调用“System.GC.Collect”引起的。如果您认为我做出了不正确的假设,请告诉我。

我试图找到调用 System.GC.Collect 的代码,但我没有成功。使用 MSVS 2010 Professional,我在 System.GC.Collect 中设置了一个断点,并通过编写一个包含对 System.GC.Collect 调用的简单测试函数来确保该断点正常工作。但是,我正在调整的应用程序并没有在那个断点处中断,这让我相信没有任何代码调用 System.GC.Collect。

我在想也许有本机代码通过直接调用 mscorwks.dll 中的本机函数并绕过 System.GC.Collect 来引发 GC。我看到 System.GC.Collect 在 mscorwks 中的 JitHelpers.cpp 中调用了 _Collect。有没有办法在该函数中设置断点?

0 投票
1 回答
1250 浏览

wpf - 释放 StreamResourceInfo.Stream

我用来从资源StreamResourceInfo.Stream中获取s 。使用后和流BitmapImage正确吗?我问是因为在内存分析器中,如果我这样做会出错。内存分析器表示已处置的实例尚未被 GC。 CloseDispose

如果我在网上看,我只能找到这个主题的帖子。在这篇文章中,回复者说,处置是有意义的。但是,如果我看情况和效果,我认为这是不对的。有人知道什么是正确的行动吗?
附加信息:在我看到的 msdn 示例中,它们没有 Dispose 或 Close。

编辑
感谢 Rick Sladkeys 的回答,我找到了解决方案:我分配StreamResourceInfo.Stream给. 在msdn中是这样写的:StreamSourceBitmapImage

如果您希望在创建 BitmapImage 后关闭流,请将 CacheOption 属性设置为 BitmapCacheOption.OnLoad。默认的 OnDemand 缓存选项保留对流的访问,直到需要位图,并且清理由垃圾收集器处理。

这意味着,BitmapImage获取流的所有权。这就是为什么如果我手动关闭/处理流,内存分析器会显示错误:位图将持有对流的引用(BitmapCacheOption OnDemand),因此只要 BitmapImage 有效,GC 就不会释放它,但流已经明确处置。在这个特定的例子中,处理是一个坏主意。
为了完整起见,我还在 msdn 中查看了上面TextRange.Load调用链接的示例。对于Load,它是相反的,Load不占用所有权,因此流必须在完成后关闭/处置。