क्या समय जैसी कोई आज्ञा है, लेकिन स्मृति उपयोग के लिए?


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-toolsऔर linux-tools-commonउबंटू 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परिणामों में कोई स्मृति आँकड़े नहीं हैं ।
बैच

"समय की तरह लेकिन स्मृति के लिए" वास्तव में कोई मतलब नहीं है। वास्तव में आप क्या जानना चाहते हैं? मेमोरी कोई माप नहीं है।
डेर होकस्टैपलर

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

आपके उत्तर से मुझे बहुत कुछ मिला, लेकिन मेरा एक सवाल है: क्या एमबी में 'अधिकतम मेमोरी' है? मेरा मानना ​​है कि यह KB या यहां तक ​​कि बी
एंड्रेस

खुशी है कि यह @ मदद करता है। मेरे परीक्षणों में, 'अधिकतम मेमोरी' MB में है, लेकिन आप इसे gist.github.com/mmorearty/fa34c0f29abe454fd14b पर संकलित करके और उदाहरण के साथ zsh में चलाकर इसका परीक्षण कर सकते हैं time malloc-bytes 10000000। वह 10 मेगाबाइट का मालकॉक करेगा, इसलिए इसे आज़माएं और फिर देखें कि zsh क्या रिपोर्ट करता है।
माइक मोअर्टी

Zsh डॉक्स के अनुसार %Mमेगाबाइट में अधिकतम मेमोरी है।
gerrard00

%Mकिलोबाइट्स
एंटी हापाला

16

GNU समय बैश में निर्मित संस्करण की तुलना में थोड़ी अधिक जानकारी की सूचना दे सकता है; 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जिसे अक्सर डिफ़ॉल्ट रूप से नहीं बुलाया जाता है।

आदमी पृष्ठ से:

K औसतन (डेटा + स्टैक + टेक्स्ट) प्रक्रिया का मेमोरी उपयोग, किलोबाइट्स में।

एम अधिकतम निवासी अपने जीवनकाल के दौरान, किलोबाइट्स में प्रक्रिया का आकार निर्धारित करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.