是否有一种工具可以运行命令行并报告峰值RAM使用总量?

我正在想象类似于/usr/bin/time的东西


当前回答

Heaptrack是一个具有GUI和文本界面的KDE工具。我发现它比valgrind更适合了解进程的内存使用情况,因为它提供了更多细节和火焰图。它还更快,因为它检查valgrind的次数更少。它会给你最大的内存使用量。

不管怎样,跟踪rss和vss是误导的,因为页面可以共享,这就是为什么memusg。你真正应该做的是跟踪/proc/[pid]/smaps中Pss的和或使用pmap。GNOME系统监视器曾经这样做,但它太昂贵了。

其他回答

(这是一个已经回答了的老问题。但只是为了记录:)

我受到杨的剧本的启发,想出了这个小工具,名叫memusg。我只是将采样率提高到0.1,以处理更短的生存过程。我没有监视单个进程,而是让它测量进程组的rss和。(是的,我写了很多独立的程序一起工作)它目前在Mac OS X和Linux上工作。用法必须和time的用法相似:

memusg ls -alR / >/dev/null

它只显示了目前的峰值,但我对记录其他(粗略)统计数据的轻微扩展感兴趣。

在我们开始任何严肃的分析之前,有这样一个简单的工具来查看是很好的。

好吧,如果你真的想显示内存峰值和一些更深入的统计数据,我建议使用一个分析器,如valgrind。一个很好的valgrind前端是alleyoop。

这里有一个单行程序,不需要任何外部脚本或实用程序,也不需要你通过Valgrind或time等其他程序启动进程,所以你可以将它用于任何已经运行的进程:

grep ^VmPeak /proc/$PID/status

(将$PID替换为您感兴趣的进程的PID)

在Linux上:

使用/usr/bin/time -v <program> <args>查找“最大常驻集大小”。

(不要与Bash time内置命令混淆!所以使用完整路径,/usr/bin/time)

例如:

> /usr/bin/time -v ./myapp
        User time (seconds): 0.00
        . . .
        Maximum resident set size (kbytes): 2792
        . . .

在BSD、MacOS上:

使用/usr/bin/time -l <program> <args>,查找“最大常驻集大小”:

>/usr/bin/time -l ./myapp
        0.01 real         0.00 user         0.00 sys
      1440  maximum resident set size
      . . .
time -f '%M' <run_program>