0

我正在尝试使用 Valgrind 的地块长时间监视进程的内存消耗。该进程处于活动状态并在特定时间间隔执行一些例行操作,我想查看所有进程的内存消耗。

我启动这个过程:

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

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

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

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

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

4

1 回答 1

1

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

您可以做的检查是在另一个窗口的循环中使用 vgdb,执行以下操作:

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

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

     vgdb  v.info stats

或者,或者在地块下运行时,您可以每 60 秒左右生成一个内存快照,方法是使用

     vgdb detailed_snapshot filenameXXX

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

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

于 2017-02-07T20:38:21.553 回答