Como saber o uso máximo de memória de um programa não-daemon?

3

Como um caso mais simples, eu tenho um arquivo executável que imprime "Hello, world" e depois sai. Como saber o uso máximo de memória durante a execução? Eu poderia até obter um gráfico de uso de memória desse processo?

    
por Perqin 16.03.2017 / 12:11

1 resposta

3

Você poderia usar '/ usr / bin / time', no exemplo abaixo nós usamos perl para consumir um pedaço de memória. Isso fornece um bom nível de detalhes para ver o que o processo consumiu. Se você quiser monitorar o que está acontecendo, veja o exemplo abaixo daquele em que 'pmap' é usado em um pid. A maior parte da saída do pmap é omitida, mas a linha final mostrará o resumo do uso da memória.

$ /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:

$ 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

Para coletar apenas a linha final, você pode usar tail -1, para a linha final. Se você quiser apenas os totais de memória, então o awk pode ser mais apropriado, remova conforme apropriado:

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