运行批处理作业并获取每个作业的峰值内存使用情况摘要

运行批处理作业并获取每个作业的峰值内存使用情况摘要

我想执行一批作业,然后得到一份摘要,告诉我每项作业的峰值内存需求是多少。在分析器下执行作业,例如瓦尔格林德是不可接受的,因为它会减慢作业的速度。对于正在运行的作业,我可以在 /proc/JOBPID/status 下读取 VmPeak 的值,其中 JOBPID 是作业进程的 PID。但我需要获取作业的最大内存需求,因此我需要在作业进程即将完成时获取 VmPeak 的值,否则我只会得到读取 VmPeak 之前的峰值内存使用量,读取之后可能会增加。因此,除非有办法读取已完成进程的 VmPeak 值,否则这种方法似乎没什么用。还有其他关于如何获取从进程启动到完成分配给进程的最大内存量的想法吗?

答案1

在我看来,VmPeak 的答案似乎不错...您可以每 x 秒将 vmpeak 附加到文件,然后找到最大值。或者,每 x 秒运行类似以下操作:VmPeak = curVmPeak if (curVmPeak > VmPeak)

答案2

您是否尝试过覆盖主程序的子进程收割者?在收割死亡子进程之前,您可能可以访问您感兴趣的进程统计信息。

我的最后一个选择是使用你自己的共享库覆盖 libc 的 exit() 调用,并让你的程序为你报告这些统计信息。

答案3

我希望找到一种解决方案,即使用钩子脚本,该脚本可以在作业进程完成时触发,然后暂时暂停进程以检查 VmPeak 的值。修改每个作业的源代码,我可能可以通过编写退出处理程序(使用类似退出函数),但我不想触碰源代码。

我最终使用的解决方案基本上是凯尔·布​​兰特提出的建议即每隔几个单位时间对峰值内存使用情况进行采样,并以此方式确定最大值。虽然我不必自己编写它。我找到了一个小工具,基本上就是这么做的,它叫做记忆时间

相关内容