【问题标题】:Monitoring memory consumption over more than 1 hour监控超过 1 小时的内存消耗
【发布时间】:2017-02-03 23:59:04
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: valgrind massif


    【解决方案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。

    【讨论】:

    • 谢谢,问题是我使用 init.d 脚本和“服务”来停止进程,并且该脚本有时会发送 kill -9 命令。自己用 SIGTERM 杀死进程可以解决问题!
    猜你喜欢
    • 2021-12-25
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2017-12-03
    • 2018-07-25
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多