问题标签 [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.

0 投票
1 回答
330 浏览

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?

enter image description here

enter image description here

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?

0 投票
1 回答
44 浏览

valgrind - Valgrind Massif 是否使用 7 KB 的堆栈来分析自己?

我需要为我的研究分析和跟踪某些程序的堆栈使用情况,但我发现 Valgrind Massif 似乎使用 7 KB 的堆栈使用来分析自己,我怎么能忽略它或者是否有任何其他适合我的分析器?

它显示了 7 KB 的堆栈使用量,甚至什么也不执行……

和地块结果:

0 投票
1 回答
444 浏览

valgrind - Valgrind地块组合快照

我正在尝试使用massif工具分析应用程序。我用这个命令运行它:

该应用程序运行了很长时间。通常,当应用程序接收到中断信号时,它会干净地完成并massif生成一个包含许多快照的配置文件:

但是,此特定应用程序只是转储库存并挂起,而没有正确退出,因此没有正确生成结果文件。我可以vgdb在应用程序运行时获取快照。但它只生成一个快照。

有什么方法可以合并快照吗?我尝试将快照添加到带有snapshot=#标题的文件中,但MassifVisualizer抱怨格式。也许可以选择将它们或某些工具结合起来。

0 投票
0 回答
78 浏览

c++ - 解决无限分配错误

我的应用程序适用于大多数输入,但一些输入文件使它在某个时候分配越来越多的内存,直到它被系统的 oom 杀手杀死。

该应用程序需要几个小时才能运行,因此当它的内存使用量开始突破时,照看它并手动中断它不是一种选择。

我尝试使用 valgrind 的地块运行应用程序,但由于它被系统杀死,它永远不会产生输出文件。

是否可以选择让 massif 立即将其快照写入磁盘?

当被 SIGINT 中断时,Massif 似乎确实为应用程序生成了一个输出文件,所以这可能会起作用。是否有另一种工具将 SIGINT 发送到消耗超过一定内存量的进程?

0 投票
1 回答
514 浏览

c++ - 在地块工具中跟踪子进程的命令

我在 Valgrind 中使用地块工具。我需要跟踪子进程的堆内存。我找不到任何命令来获取子进程的堆内存。我的应用程序是一个恶魔服务器。

在 memcheck 工具中,我可以通过使用获取子进程详细信息

有没有办法使用地块跟踪子进程堆内存?

该工具为所有子进程创建日志文件,但它仅为主进程生成 massif 文件。

我希望将为所有子进程生成地块文件。但它只为主进程创建一个文件。

我检查了文件上次访问时间。这是主进程执行到等待请求的时间。

0 投票
1 回答
555 浏览

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:22MB
  • valgrind --tool=massif command+ massif-visualizer:206MB(这是我看到的htop,我想这是我感兴趣的)
  • time -f "%M" command: 1.4GB

我应该看哪个数字?为什么数字完全不同?

0 投票
1 回答
864 浏览

rust - 使用 massif 使用 valgrind 测量时,Rust 程序的堆大小非常大

我正在尝试测量我正在编写的 rust 程序的内存大小。我注意到,当我使用以下命令测量堆大小时:

valgrind --tool=massif --pages-as-heap=yes ./program

并使用 ms_print 进行测量,内存大小非常大(最初约为 16MB)。最终,我将我的 rust 程序简化为一个空的 main 函数:

我编译了,仍然有 16MB 作为我的内存大小。我注意到,当我使用不同的机器时,相同的二进制文件的总大小为 4MB。我的一个朋友在他的机器上用相同的程序尝试了这个,使用相同的 rust/valgrind 版本,也得到了 4MB 的大小。

我想这是对可能在堆中使用的内存的某种预分配,但我想不出任何控制它的方法。我什至尝试按照指南更改分配器,但没有任何改变。

系统详情:

0 投票
1 回答
120 浏览

c++ - 用于分析多个数据结构的 massif-visualizer

我想,对于任何进行性能研究的人来说,这是一个非常常见的场景。假设一个人有几个数据结构,并且想评估它们的空间性能——不计算使用 egsizeof而是以经验的方式。我在 MWE 中对这种情况建模如下:

  • 有一个 STLstack<in>并且有一个set<int>
  • 首先我创建堆栈并将一些(随机)数字推入其中
  • 我删除堆栈,并将一些数字推入集合
  • 我跑valgrind --tool-massif --max-steps=1000 --time-unit=ms main
  • 最后,我使用同名的“massif-visualizer”进行可视化

编码:

图片: 在此处输入图像描述

当 stack->set 转换发生时,我可以看到明显的分歧。然而,内存并没有完全释放,似乎——直觉上(也许天真地)会期待一些“跷跷板”的形象。我们如何达到这个效果?我认为这会.reset()调用堆栈的析构函数。我想确实如此,因为在图像的右半部分,工具提示只谈论Rb_tree(即set<>)。我的问题是,massif工具中的哪个开关或我的代码中的哪种排列会产生更“直观”的图像?当然,我可以为我测试的每个数据结构编写相同的样板代码,但我想将它们并置,以便它们的内存性能很容易比较。

0 投票
1 回答
226 浏览

valgrind - Valgrind massif - 测量每个调用堆栈的总内存分配

我使用 valgrind massif 记录内存分配,并使用 ms_print 创建一个快照文档,显示哪个调用堆栈当前拥有多少内存,对吧?

我想测量在整个程序运行过程中哪些调用堆栈分配得最多,这意味着在计算调用堆栈的权重时应该考虑释放的内存。

这可能吗?

问候

0 投票
1 回答
79 浏览

valgrind - Valgrind地块-逆忽略?

valgrind massif 中是否有一个参数允许我只跟踪某些函数和类的分配?我想进行一次仅跟踪(取消)std::vector 分配的运行。

问候