プログラムの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シェルに組み込まれたコンポーネントです。より多くの情報が必要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のルート以外のユーザーでは動作しなくなったようです。この問題を解決するために私が書いたポーリングユーティリティは次のとおりです。https://github.com/jhclark/memusg/blob/master/memusg

関連情報