作为最简单的情况,我有一个可执行文件,它打印“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