我想比较一组进程动态分配的最大堆数。在Linux或任何自动执行此操作的应用程序中是否有任何系统命令?类似于监视工具,它运行一个进程并监视进程消耗了多少内存。
不幸的是,size(1)
命令仅反映流程的文本和数据内存部分,并处理流程使用的平均内存的会计报告
答案 0 :(得分:3)
尝试使用valgrind massif等内存分析器。
答案 1 :(得分:1)
pmap也不错,但它只给你一个快照,而不是最大值。
您可能需要查看getrusage()。在新的内核(2.6.32;不确定确切的截止)上,实际填充了ru_ * rss字段。 (在较旧的内核上,它们总是设置为零......)
还可以尝试“cat / proc /< pid> / status”并查看VmPeak(显示峰值虚拟内存使用情况)和VmHWM(显示峰值驻留设置大小)。这些都是“高水位标记”,因为它们在一个过程的生命周期中上升但从未下降。如果您可以在流程终止时获取它们的快照,则可以自己收集数据。
我曾写过一个.so来做那件事;它通过修补exit()工作(并使用LD_PRELOAD调用它)。但这是为了工作,我没有副本: - (。