测量程序的 RAM 使用情况

测量程序的 RAM 使用情况

time如果您想计算给定命令占用了多少 CPU 时间,这是一个出色的命令。

我正在寻找类似的东西,可以测量程序和任何孩子的最大 RAM 使用情况。最好应该区分已使用和未使用的已分配内存。也许它甚至可以给出内存使用量的中位数(因此您在长时间运行时应该预期的内存使用量)。

所以我想做:

rammeassure my_program my_args

并获得类似于以下内容的输出:

Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes

我看过memusg https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82但我认为这有点像黑客。

答案1

time是您 shell 的内置组件。如果您愿意time但需要更多信息,请尝试time使用详细 ( -v) 模式的 GNU:

/usr/bin/time -v sleep 5               
    Command being timed: "sleep 5"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:05.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): 2144
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 179
    Voluntary context switches: 2
    Involuntary context switches: 1
    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

在包管理器中搜索包“time”或“gnutime”。

答案2

您可以使用时间测量进程的高水位内存使用情况(RSS 和虚拟)。

例如:

$ tstime date       
Tue Aug 16 21:35:02 CEST 2011

Exit status: 0

pid: 31169 (date) started: Tue Aug 16 21:35:02 2011
        real   0.017 s, user   0.000 s, sys   0.000s
        rss      888 kb, vm     9764 kb

它还支持更容易解析的输出模式(-t)。

答案3

也许有点矫枉过正,但我​​刚刚发现valgrind有一个很好的工具,名为massif.我测试了它xterm

valgrind --trace-children=yes --tool=massif xterm
ms_print massif.out.* | less

你会得到一个很好的内存使用图:

    MB
4.230^                     #                    :::::::  :::      @@:     ::: 
     |   @                 #:::@::@@:::::@::::::: :: : ::: :::::::@ ::::::: ::
     |   @               ::#:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::::@@:::::::::: #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
   0 +----------------------------------------------------------------------->Mi
     0                                                                   292.4

以及过于详细的内存使用信息。详细信息在valgrind 手册

但程序运行速度会慢 20 倍左右。另外,我在xterm.他们的内存占用已被考虑在内,因为--trace-children=yes选项就在那里!

答案4

看起来 tstime 在 Linux >=3.0 下的非 root 下不再工作。这是我编写的一个轮询实用程序来解决这个问题:https://github.com/jhclark/memusg/blob/master/memusg

相关内容