如何知道非守护程序的最大内存使用量?

如何知道非守护程序的最大内存使用量?

作为最简单的情况,我有一个可执行文件,它打印“Hello, world”然后退出。如何知道其执行过程中的最大内存使用量?我什至可以获得该进程的内存使用情况图吗?

答案1

您可以使用“/usr/bin/time”,在下面的示例中我们使用 perl 来消耗一块内存。这提供了一个很好的细节级别来查看进程消耗了什么。如果您想监视正在发生的情况,请参阅下面的示例,其中在 pid 上使用“pmap”。 pmap 输出的大部分内容被省略,但最后一行将显示内存使用情况摘要。

$ /usr/bin/time --verbose perl -e 'my $a = "a" x 919200000;'
    Command being timed: "perl -e my $a = "a" x 919200000;"
    User time (seconds): 0.19
    System time (seconds): 0.38
    Percent of CPU this job got: 99%*emphasized text*
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.57
    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): 1798908
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 449020
    Voluntary context switches: 1
    Involuntary context switches: 2
    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

地图:

$ pmap -x $( pgrep firefox ) 
Address           Kbytes     RSS   Dirty Mode  Mapping
...
00007fffa75fc000       8       8       0 r-x--   [ anon ]
00007fffa75fe000       8       0       0 r----   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         1865700  548748  422532

要仅收集最后一行,您可以使用 tail -1 作为最后一行。如果您只需要内存总计,那么 awk 可能更合适,请根据需要删除:

$ pmap -x $( pgrep firefox ) | awk '{ if( $_ ~ /^total/ ) { printf( "%d %d %d\n", $3, $4, $5 ); } }'
1976996 595644 478532

相关内容