2017-02-03 74 views
0

我试图用Valgrind的地块长时间监视进程的内存消耗。该过程是活动的,并在特定的时间间隔执行一些例行操作,我希望看到所有过程的内存消耗。监控超过1小时的内存消耗

我启动过程与:

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

我的计划是建立一个守护进程。

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

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

我运行的是最新版本的valgrind的:3.12.0

回答

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 

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

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

+0

谢谢,问题在于我正在使用init.d脚本和'service'来停止该进程,并且该脚本有时会发送kill -9命令。用SIGTERM自己杀死进程解决了这个问题! – Perennialista