ビデーモンの最大メモリ使用量をどのように知ることができますか?

ビデーモンの最大メモリ使用量をどのように知ることができますか?

最も簡単なケースとして、「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

関連情報