问题标签 [massif]
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.
valgrind - Different results from running program with Valgrind with(out) using Massif
I'm creating a performance-driven program for a school project and as such, I thought I'd profile the memory usage of my program.
For that I used Valgrind, both with and without the Massif tool. The results for using each test are below:
Running valgrind --leak-check=full -v ./main
gave me the above output. Okay, got it, a total of around 67MB of heap usage, right?
But then I wanted to know how much memory was allocated by my program at runtime, so I did some digging and found the Massif tool, which does exactly that.
Thus I ran valgrind --tool=massif ./main
, followed by ms_print massif.out.<pid>
, in which <pid>
is the process ID of the now dead process which executed my program. That provided me with the output shown in the above 2 pictures.
So my question is, how can it be that the total heap usage is around 67MB but Massif says it peaked at 109.9MB at a certain point?
valgrind - Valgrind Massif 是否使用 7 KB 的堆栈来分析自己?
我需要为我的研究分析和跟踪某些程序的堆栈使用情况,但我发现 Valgrind Massif 似乎使用 7 KB 的堆栈使用来分析自己,我怎么能忽略它或者是否有任何其他适合我的分析器?
它显示了 7 KB 的堆栈使用量,甚至什么也不执行……
和地块结果:
valgrind - Valgrind地块组合快照
我正在尝试使用massif
工具分析应用程序。我用这个命令运行它:
该应用程序运行了很长时间。通常,当应用程序接收到中断信号时,它会干净地完成并massif
生成一个包含许多快照的配置文件:
但是,此特定应用程序只是转储库存并挂起,而没有正确退出,因此没有正确生成结果文件。我可以vgdb
在应用程序运行时获取快照。但它只生成一个快照。
有什么方法可以合并快照吗?我尝试将快照添加到带有snapshot=#
标题的文件中,但MassifVisualizer抱怨格式。也许可以选择将它们或某些工具结合起来。
c++ - 解决无限分配错误
我的应用程序适用于大多数输入,但一些输入文件使它在某个时候分配越来越多的内存,直到它被系统的 oom 杀手杀死。
该应用程序需要几个小时才能运行,因此当它的内存使用量开始突破时,照看它并手动中断它不是一种选择。
我尝试使用 valgrind 的地块运行应用程序,但由于它被系统杀死,它永远不会产生输出文件。
是否可以选择让 massif 立即将其快照写入磁盘?
当被 SIGINT 中断时,Massif 似乎确实为应用程序生成了一个输出文件,所以这可能会起作用。是否有另一种工具将 SIGINT 发送到消耗超过一定内存量的进程?
c++ - 在地块工具中跟踪子进程的命令
我在 Valgrind 中使用地块工具。我需要跟踪子进程的堆内存。我找不到任何命令来获取子进程的堆内存。我的应用程序是一个恶魔服务器。
在 memcheck 工具中,我可以通过使用获取子进程详细信息
有没有办法使用地块跟踪子进程堆内存?
该工具为所有子进程创建日志文件,但它仅为主进程生成 massif 文件。
我希望将为所有子进程生成地块文件。但它只为主进程创建一个文件。
我检查了文件上次访问时间。这是主进程执行到等待请求的时间。
memory - 'time -f "%M"' 和 'valgrind --tool=massif' 有什么区别?
我想查看command
. 我有一个参数化算法,我想知道程序何时会因我的机器(12GB RAM)上的内存不足错误而崩溃。
我试过了:
第一个给了我1414168
(1.4GB;感谢ks1322指出它以 KB 为单位!)而 valgrind 给了我
我有点困惑我应该取哪个数字,但让我们假设“总数”(22MB)。
向massif-visualizer
我展示
现在我为同一个命令有 3 个不同的数字:
valgrind --tool=massif command
+ms_print
:22MBvalgrind --tool=massif command
+massif-visualizer
:206MB(这是我看到的htop
,我想这是我感兴趣的)time -f "%M" command
: 1.4GB
我应该看哪个数字?为什么数字完全不同?
rust - 使用 massif 使用 valgrind 测量时,Rust 程序的堆大小非常大
我正在尝试测量我正在编写的 rust 程序的内存大小。我注意到,当我使用以下命令测量堆大小时:
valgrind --tool=massif --pages-as-heap=yes ./program
并使用 ms_print 进行测量,内存大小非常大(最初约为 16MB)。最终,我将我的 rust 程序简化为一个空的 main 函数:
我编译了,仍然有 16MB 作为我的内存大小。我注意到,当我使用不同的机器时,相同的二进制文件的总大小为 4MB。我的一个朋友在他的机器上用相同的程序尝试了这个,使用相同的 rust/valgrind 版本,也得到了 4MB 的大小。
我想这是对可能在堆中使用的内存的某种预分配,但我想不出任何控制它的方法。我什至尝试按照本指南更改分配器,但没有任何改变。
系统详情:
c++ - 用于分析多个数据结构的 massif-visualizer
我想,对于任何进行性能研究的人来说,这是一个非常常见的场景。假设一个人有几个数据结构,并且想评估它们的空间性能——不计算使用 egsizeof
而是以经验的方式。我在 MWE 中对这种情况建模如下:
- 有一个 STL
stack<in>
并且有一个set<int>
- 首先我创建堆栈并将一些(随机)数字推入其中
- 我删除堆栈,并将一些数字推入集合
- 我跑
valgrind --tool-massif --max-steps=1000 --time-unit=ms main
- 最后,我使用同名的“massif-visualizer”进行可视化
编码:
当 stack->set 转换发生时,我可以看到明显的分歧。然而,内存并没有完全释放,似乎——直觉上(也许天真地)会期待一些“跷跷板”的形象。我们如何达到这个效果?我认为这会.reset()
调用堆栈的析构函数。我想确实如此,因为在图像的右半部分,工具提示只谈论Rb_tree
(即set<>
)。我的问题是,massif
工具中的哪个开关或我的代码中的哪种排列会产生更“直观”的图像?当然,我可以为我测试的每个数据结构编写相同的样板代码,但我想将它们并置,以便它们的内存性能很容易比较。
valgrind - Valgrind massif - 测量每个调用堆栈的总内存分配
我使用 valgrind massif 记录内存分配,并使用 ms_print 创建一个快照文档,显示哪个调用堆栈当前拥有多少内存,对吧?
我想测量在整个程序运行过程中哪些调用堆栈分配得最多,这意味着在计算调用堆栈的权重时应该考虑释放的内存。
这可能吗?
问候
valgrind - Valgrind地块-逆忽略?
valgrind massif 中是否有一个参数允许我只跟踪某些函数和类的分配?我想进行一次仅跟踪(取消)std::vector 分配的运行。
问候