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

我想执行一批作业,之后有一个总结,告诉我每个作业的峰值内存要求是什么。 在诸如valgrind的分析器下执行作业是不可接受的,因为它会减慢作业速度。 对于正在运行的作业,我可以在/ proc / JOBPID / status下读取VmPeak的值,其中JOBPID是作业进程的PID。 但是我需要得到这个工作的最大内存需求,所以当工作进程即将完成的时候,我需要得到VmPeak的值,否则我只会在我阅读的时候得到最高的内存使用量VmPeak,读后可能会增加。 所以除非有办法读取已经完成的进程的VmPeak的值,否则这种方法似乎并不有用。 有关如何获得从启动到启动完成时分配给进程的最大内存量的其他想法?

VmPeak答案看起来对我来说是一个很好的答案…你可以每隔x秒附加一个vmpeak文件,然后find最高值。 或者,每x秒,运行如下所示: VmPeak = curVmPeak if (curVmPeak > VmPeak)

你有没有尝试重写你的主程序的孩子收割者? 在获得死亡孩子之前,您可能有权访问您感兴趣的stream程统计信息。

我最后一个赌注是重写libc的exit()调用你自己的共享库,并让你的程序为你报告这些统计数据。

我希望find一个解决scheme,使用一个钩子脚本,这个脚本可以在作业完成时触发,然后暂停这个过程来检查VmPeak的值。 修改每个工作的源代码,我可能很容易通过编写一个退出处理程序(使用类似于atexit函数)做类似的事情。 但是我不想碰这个源码。

我最终使用的解决scheme基本上是Kyle Brandt提出的 ,即每隔几个单位时间对峰值内存使用情况进行抽样,并以此方式确定最大值。 虽然我不必自己写。 我发现了一个小工具,基本上就是这个,叫做memtime 。