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

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


当前回答

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

其他回答

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

grep ^VmPeak /proc/$PID/status

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

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

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

memusg ls -alR / >/dev/null

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

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

在macOS上,可以改用DTrace。“Instruments”应用是一个很好的GUI,它带有XCode afaik。

[编辑:适用于Ubuntu 14.04: /usr/bin/time -v命令确保使用完整路径。]

看起来/usr/bin/time确实给了你这个信息,如果你输入-v(这是在Ubuntu 8.10上)。例如,参见下面的最大常驻集大小:

$ /usr/bin/time -v ls /
....
        Command being timed: "ls /"
        User time (seconds): 0.00
        System time (seconds): 0.01
        Percent of CPU this job got: 250%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 315
        Voluntary context switches: 2
        Involuntary context switches: 0
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

因为/usr/bin/time在许多现代发行版中都不存在(取而代之的是Bash内置时间),你可以使用Busybox time实现带-v参数:

busybox time -v uname -r

它的输出类似于GNU时间输出。 Busybox在大多数Linux发行版(Debian, Ubuntu等)中都是预安装的。如果你使用Arch Linux,你可以安装它:

sudo pacman -S busybox