Zaman gibi herhangi bir komut var mı, ama hafıza kullanımı için?


34

Gibi herhangi bir komut var mı time, ama bu daha fazla istatistik rapor eder? Böyle bir şey yapabilirsem çok iyi olurdu:

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

Daha da ileri giderse, bu harika olurdu. Şu anda, hata ayıklama için, ya top(aslında glances) dikkatle bakmaya başladım ya da tüm kodumu kullanarak ifadeler serptim.

Emri geçebileceğim bir şey olsaydı, bu harika olurdu.

DÜZENLE

Bir çözüm bulmuş olabilirim: perfpakette linux-toolsve linux-tools-commonUbuntu 12.04'te.

$ 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

( Yardımcı olan sayfa. )


3
perfSonuçlarınızda hafıza istatistiği yok .
BatchyX 28:12

"Zaman gibi ama hafıza için" pek mantıklı gelmiyor. Ne tam olarak bilmek istiyoruz? Bellek bir ölçüm değil.
Der Hochstapler

1
Yapmakta olduğunuz bir uygulamayı denetlemek mi istiyorsunuz? Eğer öyleyse, hangi dilde?
dset0x

Yanıtlar:


28

zshsahip olduğundan daha güçlü bir yerleşik timekomutu bashvardır ve zshsürüm bellek istatistiklerini bildirebilir.

zshGünlük kabuk olarak düzenli kullanmasanız bile , bu tür istatistikleri toplamanız gerektiğinde çalıştırabilirsiniz.

TIMEFMTİstediğiniz çıktıyı belirtmek için ortam değişkenini ayarlayın . İşte dosyamda ne var .zshrc(belki biraz fazla süslü, ama hoşuma gidiyor):

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'

Örnek çıktı:

% 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

Cevabınız bana LOT yardımcı oldu ama bir sorum var: MB 'max hafıza'? KB ya da B olduğuna inanıyorum.
Andres

Yardım ettiğine sevindim, @Andres. Testlerimde 'max memory' MB cinsindendir, ancak gist.github.com/mmorearty/fa34c0f29abe454fd14b dosyasını derleyerek ve örneğin zsh ile çalıştırarak kendiniz test edebilirsiniz time malloc-bytes 10000000. Bu 10 megabayt malloc olacak, bu yüzden deneyin ve sonra zsh'nin ne rapor ettiğini görün.
Mike Morearty

Zsh belgelerine göre %Mmegabayt cinsinden maksimum hafızadır.
gerrard00

%Mkilobayt
cinsinden

16

GNU zamanı , Bash'e yerleşik olan sürümden biraz daha fazla bilgi bildirebilir; command timesadece timeonu çağırmak yerine kullanın ve ayrıntılar için man sayfasına veya bilgisine bakın.


2
Veya çağrı/usr/bin/time -v ./my_command.sh
ostrokach 14:17

3

Richard'ın cevabına dayanarak, GNU zamanını kullanmak ve ortalama ve maksimum hafıza bilgisi sağlamak için bir takma ad oluşturabilirsiniz:

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

veya ortamınızı ayarlayın:

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

Ancak bunun yalnızca /usr/bin/timevarsayılan olarak çağrılmayan bir şey için çalıştığını unutmayın.

Man sayfasından:

K İşlemin ortalama toplam (veri + yığın + metin) belleği kullanımı, Kilobayt.

M Maximum ikamet süresi boyunca, işlemin Kilobayt cinsinden boyutunu belirler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.