监控内存消耗超过1小时

时间:2017-02-03 23:59:05

标签: valgrind massif

我试图用Valgrind的地块长时间监控一个过程的内存消耗。该过程处于活动状态,并以特定的时间间隔执行一些例行操作,我希望看到所有过程的内存消耗。

我用以下内容启动了这个过程:

valgrind --tool=massif --trace-children=yes <program name> <arguments>

我的程序正在创建一个守护进程。

我看到massif为主进程创建了一个文件,该文件几乎立即退出而另一个仍处于活动状态。当我杀死守护进程时,massif输出另一个带有守护进程pid的文件。但是,我注意到只有当我让这个过程运行不超过15分钟左右时,我才会得到第二个文件。如果我让它运行更多,则不会生成任何文件。 Valgrind没有显示任何错误。

我怀疑valgrind无法处理如此大量的信息,这是正确的吗?关于如何以任何其他方式实现我的目标的任何建议?

我正在运行valgrind的最新版本:3.12.0

1 个答案:

答案 0 :(得分:1)

如果valgrind遇到问题(例如内存不足的情况), 它应该产生一个错误信息。 当valgrind死亡时没有错误消息的可能原因 valgrind被杀死-9或被OOM杀死。

你可以做的就是在另一个窗口的循环中使用vgdb, 做类似的事情:

  while true
  do
     vgdb .... valgrind monitor command ...
     sleep 60
  done

作为monitor命令,您可以使用命令获取 valgrind内存的内部状态:

     vgdb  v.info stats

或者,当在massif下运行时,您可以生成内存 使用

每60秒左右拍摄一次快照
     vgdb detailed_snapshot filenameXXX

(您需要更改每个快照的文件名)

有关vgdb和monitor命令的详细信息,请参阅http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver