Apakah ada perintah seperti waktu, tetapi untuk penggunaan memori?

34

Apakah ada perintah seperti itu time, tetapi itu melaporkan lebih banyak statistik? Akan sangat bagus jika saya bisa melakukan sesuatu seperti:

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

Jika itu bisa lebih jauh, itu akan bagus. Saat ini, untuk debugging, saya akhirnya menatap dengan sungguh-sungguh top(sebenarnya glances), atau menaburkan pernyataan di seluruh kode saya.

Jika ada sesuatu yang bisa saya berikan perintah, itu akan fantastis.

EDIT

Saya mungkin telah menemukan solusi: perfdalam paket linux-toolsdan linux-tools-commondi Ubuntu 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

( Halaman yang membantu. )

Peter
sumber
3
Tidak ada statistik memori dalam perfhasil Anda .
BatchyX
"seperti waktu tetapi untuk memori" tidak terlalu masuk akal. Apa yang sebenarnya ingin kamu ketahui? Memori bukan ukuran.
Der Hochstapler
1
Apakah Anda ingin mengaudit aplikasi yang Anda buat? Jika ya, dalam bahasa apa?
dset0x

Jawaban:

28

zshmemiliki perintah bawaan yang lebih kuat timedaripada yang bashdimiliki, dan zshversi dapat melaporkan statistik memori.

Bahkan jika Anda tidak secara teratur menggunakannya zshsebagai cangkang Anda sehari-hari, Anda bisa menjalankannya ketika Anda perlu mengumpulkan statistik semacam ini.

Atur TIMEFMTvariabel lingkungan untuk menunjukkan output yang Anda inginkan. Inilah yang saya miliki di .zshrcfile saya (mungkin agak terlalu mewah, tapi saya suka):

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'

Output sampel:

% 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
Mike Morearty
sumber
Jawaban Anda membantu saya BANYAK tapi saya punya pertanyaan: Apakah 'memori maks' dalam MB? Saya percaya itu KB atau bahkan B.
Andres
Senang itu membantu, @Andres. Dalam pengujian saya, 'memori maksimal' dalam MB, tetapi Anda dapat mengujinya sendiri dengan mengkompilasi gist.github.com/mmorearty/fa34c0f29abe454fd14b dan menjalankannya di zsh dengan mis time malloc-bytes 10000000. Itu akan malloc 10 megabita, jadi cobalah dan lihat apa yang dilaporkan zsh.
Mike Morearty
Menurut dokumen zsh %M adalah memori maksimum dalam megabita.
gerrard00
%Mlaporan dalam kilobyte
Antti Haapala
16

Waktu GNU dapat melaporkan informasi sedikit lebih banyak daripada versi yang dibangun dalam Bash; gunakan command timebukan hanya timeuntuk memintanya, dan lihat halaman manual atau info untuk detailnya.

Richard Kettlewell
sumber
2
Atau telepon/usr/bin/time -v ./my_command.sh
ostrokach
3

Berdasarkan jawaban Richard, Anda dapat membuat alias untuk menggunakan waktu GNU dan memberikan informasi memori rata-rata dan maksimum:

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

atau sesuaikan lingkungan Anda:

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

Tetapi perlu diketahui bahwa ini hanya berfungsi untuk /usr/bin/timeyang sering tidak dipanggil secara default.

Dari halaman manual:

K Rata-rata total (data + stack + teks) penggunaan memori proses, dalam Kilobytes.

M Ukuran residen maksimum yang ditetapkan proses selama masa pakainya, dalam Kilobyte.

Dej
sumber