监控超过 1 小时的内存消耗



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

我通过以下方式启动该过程:

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

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

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

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

我正在运行最新版本的瓦尔格林德:3.12.0

如果 valgrind 遇到问题(例如内存不足的情况(,它应该产生一条错误消息。瓦尔格林德去世时没有错误消息的一个可能原因是瓦尔格林德杀死了-9或被OOM杀死。

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

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

作为监视命令,您可以使用命令来获取瓦尔格林德存储器的内部状态:

     vgdb  v.info stats

或者,在地块下运行时,您可以产生内存每 60 秒左右快照一次,使用

     vgdb detailed_snapshot filenameXXX

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

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

相关内容

最新更新