timeのようなコマンドはありますが、メモリ使用量のためですか?


34

のようなコマンドはありますtimeが、より多くの統計情報が報告されますか?次のようなことができたら素晴らしいと思います。

$ statistics some_command
time:
    real    0m3.002s
    user    0m0.000s
    sys     0m0.000s
memory:
    min     41K
    peak    2.5M
    mean    1.1M
. . .

さらに先に進むことができれば、それは素晴らしいことです。現時点では、デバッグのために、top(実際にglances)じっと見つめるか、コード全体にステートメントを振りかけます。

コマンドを渡すことができるものがあれば、それは素晴らしいことです。

編集

perfパッケージlinux-toolslinux-tools-commonUbuntu 12.04で解決策を見つけたかもしれません。

$ perf stat ./someprocess
Performance counter stats for './someprocess':

      12007.384578 task-clock                #    0.996 CPUs utilized          
             1,092 context-switches          #    0.000 M/sec                  
                16 CPU-migrations            #    0.000 M/sec                  
           295,102 page-faults               #    0.025 M/sec                  
    40,553,682,299 cycles                    #    3.377 GHz                     [83.33%]
    18,400,458,723 stalled-cycles-frontend   #   45.37% frontend cycles idle    [83.35%]
     8,356,832,355 stalled-cycles-backend    #   20.61% backend  cycles idle    [66.64%]
    56,930,684,595 instructions              #    1.40  insns per cycle        
                                             #    0.32  stalled cycles per insn [83.34%]
     9,083,443,825 branches                  #  756.488 M/sec                   [83.35%]
         3,431,737 branch-misses             #    0.04% of all branches         [83.33%]

      12.051963969 seconds time elapsed

助けたページ。


3
perf結果にメモリ統計はありません。
BatchyX

「時間のように、しかし記憶のために」は本当に意味をなさない。正確に何を知りたいですか?メモリは測定値ではありません。
デアホッホステープラー

1
作成中のアプリケーションを監査したいですか?もしそうなら、どの言語で?
dset0x

回答:


28

zshより強力な組み込みtimeコマンドがbashあり、zshバージョンはメモリ統計を報告できます。

zsh日常のシェルとして定期的に使用しない場合でも、これらの種類の統計を収集する必要があるときに実行できます。

TIMEFMT環境変数を設定して、必要な出力を示します。ここに私が私の.zshrcファイルに持っているものがあります(おそらくちょっと派手すぎますが、私はそれが好きです):

TIMEFMT='%J   %U  user %S system %P cpu %*E total'$'\n'\
'avg shared (code):         %X KB'$'\n'\
'avg unshared (data/stack): %D KB'$'\n'\
'total (sum):               %K KB'$'\n'\
'max memory:                %M MB'$'\n'\
'page faults from disk:     %F'$'\n'\
'other page faults:         %R'

サンプル出力:

% time ls
[... the output of ls, followed by:]
ls -G   0.00s  user 0.00s system 91% cpu 0.004 total
avg shared (code):         0 KB
avg unshared (data/stack): 0 KB
total (sum):               0 KB
max memory:                668 MB
page faults from disk:     0
other page faults:         337

あなたの答えは私にたくさん助けましたが、質問があります:「最大メモリ」はMBですか?私はそれのKBあるいはB.を信じて
アンドレス

@Andres、助けてくれてうれしいです。私のテストでは、「最大メモリ」はMB 単位ですがgist.github.com / mmorearty / fa34c0f29abe454fd14bをコンパイルし、たとえばを使用してzshで実行することで、自分でテストできますtime malloc-bytes 10000000。それは10メガバイトをmallocするので、試してみてからzshが報告するものを見てください。
マイクモレアーティ

zshドキュメントに よると%Mメガバイト単位の最大メモリです。
gerrard00

%Mキロバイト
単位の

16

GNU timeは、Bashに組み込まれているバージョンよりも少し多くの情報を報告できます。command time単にtime呼び出すのではなく使用し、詳細についてはマニュアルページまたは情報を参照してください。


2
または電話/usr/bin/time -v ./my_command.sh
-ostrokach

3

リチャードの答えに基づいて、GNU時間を使用し、平均および最大メモリ情報を提供するエイリアスを作成できます。

alias time="$(which time) -f '\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'"

または環境を調整します。

export TIME='\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'

ただし、/usr/bin/timeこれはデフォルトで呼び出されないことが多いためのみ機能することに注意してください。

manページから:

Kプロセスの平均合計(データ+スタック+テキスト)メモリ使用量(キロバイト単位)。

Mライフタイム中のプロセスの最大常駐セットサイズ(キロバイト単位)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.