जवाबों:
यहां एक-लाइनर है जिसे किसी भी बाहरी स्क्रिप्ट या उपयोगिताओं की आवश्यकता नहीं है और आपको Valgrind या समय जैसे किसी अन्य प्रोग्राम के माध्यम से प्रक्रिया शुरू करने की आवश्यकता नहीं है, इसलिए आप इसे पहले से चल रही किसी भी प्रक्रिया के लिए उपयोग कर सकते हैं:
grep VmPeak /proc/$PID/status
( $PID
उस प्रक्रिया के पीआईडी से बदलें जिसमें आप रुचि रखते हैं)
[ संपादित करें : Ubuntu 14.04 पर काम करता है: /usr/bin/time -v command
पूर्ण पथ का उपयोग करना सुनिश्चित करें।]
ऐसा लगता /usr/bin/time
है कि आपको यह जानकारी दी गई है, यदि आप पास -v
(यह Ubuntu 8.10 पर है)। देखें, उदाहरण के लिए, Maximum resident set size
नीचे:
$ / usr / बिन / समय -v ls / .... कमांड की समय सीमा: "ls /" उपयोगकर्ता समय (सेकंड): 0.00 सिस्टम समय (सेकंड): 0.01 सीपीयू का प्रतिशत इस नौकरी को मिला: 250% बीता हुआ (दीवार घड़ी) समय (h: mm: ss या m: ss): 0: 00.00 औसत साझा पाठ आकार (किबेट्स): 0 औसत अनसेक्ड डेटा साइज (kbytes): 0 औसत स्टैक आकार (kbytes): 0 औसत कुल आकार (kbytes): 0 अधिकतम निवासी सेट आकार (kbytes): 0 औसत निवासी सेट आकार (kbytes): 0 प्रमुख (आवश्यक I / O) पृष्ठ दोष: 0 माइनर (एक फ्रेम को पुनः प्राप्त करना) पृष्ठ दोष: 315 स्वैच्छिक संदर्भ स्विच: 2 अनैच्छिक संदर्भ स्विच: 0 स्वैप: 0 फाइल सिस्टम इनपुट: 0 फ़ाइल सिस्टम आउटपुट: 0 सॉकेट संदेश भेजे गए: 0 सॉकेट संदेश प्राप्त हुए: 0 संकेत दिए गए: 0 पृष्ठ का आकार (बाइट्स): 4096 बाहर निकलने की स्थिति: 0
/bin/time -v
इसे हल करता है।
time -l
MacOS पर प्रयास करें , समान आउटपुट देता है।
(यह एक पहले से ही उत्तर, पुराना सवाल है .. लेकिन सिर्फ रिकॉर्ड के लिए :)
मैं यांग की पटकथा से प्रेरित था, और इस छोटे उपकरण के साथ आया था, जिसका नाम मेमसग था । मैंने बस बहुत कम जीवित प्रक्रियाओं को संभालने के लिए नमूना दर को बढ़ाकर 0.1 कर दिया है। किसी एक प्रक्रिया की निगरानी करने के बजाय, मैंने इसे प्रक्रिया समूह के rss योग को माप दिया। (हाँ, मैं बहुत सारे अलग-अलग प्रोग्राम लिखता हूँ जो एक साथ काम करते हैं) यह वर्तमान में मैक ओएस एक्स और लिनक्स पर काम करता है। उपयोग के समान होना था time
:
memusg ls -alR /> / dev / null
यह केवल क्षण के लिए चोटी दिखाता है, लेकिन मैं अन्य (किसी न किसी) आंकड़ों को रिकॉर्ड करने के लिए मामूली एक्सटेंशन में दिलचस्पी रखता हूं।
किसी भी गंभीर रूपरेखा को शुरू करने से पहले सिर्फ एक बार देखने के लिए इस तरह के सरल उपकरण का उपयोग करना अच्छा है।
ps -o rss=
जहां rss मेरे बीएसडी मैन पेज से प्रक्रिया की वास्तविक मेमोरी (निवासी सेट) आकार (1024 बाइट इकाइयों में) है।
एक-लाइनर:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
एक प्रक्रिया में सभी मेमोरी को मापने के लिए --पेज-ए-हीप का उपयोग नोट करें। अधिक जानकारी यहाँ: http://valgrind.org/docs/manual/ms-manual.html
time
, मैं तुम्हे छोड़ रहा हूँ।
valgrind --massif
। आप उस ms_print
टूल का भी उपयोग कर सकते हैं जो इसके लिए उपयोगी आउटपुट (समय के साथ उपयोग के एएससीआई चार्ट सहित) के लिए आता है
time
, जैसे कमांड पर कम से कम 10 गुना अधिक समय लेना ls
।
लिनक्स पर:
/usr/bin/time -v <program> <args>
" अधिकतम निवासी सेट आकार " का उपयोग करें और देखें ।
(बैश साथ भ्रमित होने की नहीं time
निर्मित आदेश! तो का उपयोग पूर्ण पथ , /usr/bin/time
)
उदाहरण के लिए:
> /usr/bin/time -v ./myapp
User time (seconds): 0.00
. . .
Maximum resident set size (kbytes): 2792
. . .
BSD, MacOS पर:
उपयोग करें /usr/bin/time -l <program> <args>
, " अधिकतम निवासी सेट आकार " की तलाश में:
>/usr/bin/time -l ./myapp
0.01 real 0.00 user 0.00 sys
1440 maximum resident set size
. . .
sudo apt-get install time
शायद (ग्नू) समय (1) पहले से ही आप क्या चाहते हैं। उदाहरण के लिए:
$ /usr/bin/time -f "%P %M" command
43% 821248
लेकिन अन्य प्रोफाइलिंग टूल आपको जो खोज रहे हैं उसके आधार पर अधिक सटीक परिणाम दे सकते हैं।
time
उपयोग करते समय एक अंतर्निहित कमांड है csh
। यदि आप सटीक मार्ग का उपयोग करते हैं, तो यह आपको बाहरी कमांड चलाने की अनुमति देगा। जहाँ तक मुझे पता है, केवल GNU संस्करण प्रारूप विकल्प का समर्थन करता है।
/ usr / बिन / समय शायद वही करता है जो आप चाहते हैं, वास्तव में। कुछ इस तरह।
/ usr / bin / time --format = '(% Xtext +% Ddata% Mmax)'
विवरण के लिए समय (1) देखें ...
MacOS सिएरा उपयोग पर:
/usr/bin/time -l commandToMeasure
आप grep
जो चाहते हैं उसे लेने के लिए उपयोग कर सकते हैं ।
command time -l
इसके बजाय उपयोग कर सकते हैं /usr/bin/time -l
जो आपके शेल को वास्तव time
में बिलिन फ़ंक्शन के बजाय एक बाइनरी कॉल करने का कारण होगा । (हाँ, command
एक प्लेसहोल्डर नहीं है, command time
बस की तुलना में अलग है time
।)
यदि प्रक्रिया कम से कम कुछ सेकंड के लिए चलती है, तो आप निम्नलिखित बैश स्क्रिप्ट का उपयोग कर सकते हैं, जो दिए गए कमांड लाइन को चलाएगा फिर पीक आरएसएस ( rss
किसी अन्य विशेषता के लिए विकल्प जिसमें आप रुचि रखते हैं) को स्थानांतरित करने के लिए प्रिंट कर सकते हैं। यह कुछ हद तक हल्का है, और यह ps
उबंटू 9.04 (जो मैं इसके लिए नहीं कह सकता time
) में शामिल के साथ मेरे लिए काम करता है ।
#!/usr/bin/env bash
"$@" & # Run the given command line in the background.
pid=$! peak=0
while true; do
sleep 1
sample="$(ps -o rss= $pid 2> /dev/null)" || break
let peak='sample > peak ? sample : peak'
done
echo "Peak: $peak" 1>&2
आप ऐसा करने के लिए Valgrind जैसे टूल का उपयोग कर सकते हैं ।
यहाँ (अन्य उत्तरों के आधार पर) एक बहुत ही सरल स्क्रिप्ट है जो पहले से चल रही प्रक्रिया को देखता है। आप इसे तर्क की प्रक्रिया के रूप में देखना चाहते हैं:
#!/usr/bin/env bash
pid=$1
while ps $pid >/dev/null
do
ps -o vsz= ${pid}
sleep 1
done | sort -n | tail -n1
उदाहरण उपयोग:
max_mem_usage.sh 23423
मासिफ का उपयोग करें: http://valgrind.org/docs/manual/ms-manual.html
Heaptrack KDE टूल है जिसमें GUI और टेक्स्ट इंटरफ़ेस है। मैं इसे किसी प्रक्रिया के मेमोरी उपयोग को समझने के लिए वैलग्राइंड की तुलना में अधिक उपयुक्त मानता हूं क्योंकि यह अधिक विवरण और फ्लेमोग्राफ प्रदान करता है। यह तेज़ भी है क्योंकि यह उस वैलग्राइंड की कम जाँच करता है। और यह आपको चरम मेमोरी उपयोग देता है।
वैसे भी, ट्रैकिंग rss और vss भ्रामक है क्योंकि पृष्ठों को साझा किया जा सकता है, इसीलिए ऐसा है memusg
। क्या तुम सच में क्या करना चाहिए की राशि को ट्रैक है Pss
में /proc/[pid]/smaps
या उपयोग pmap
। GNOME सिस्टम-मॉनिटर ऐसा करता था लेकिन यह बहुत महंगा था।
पहिया को फिर से आविष्कार करना, हाथ से बने बैश स्क्रिप्ट के साथ। त्वरित और साफ।
मेरे उपयोग का मामला: मैं एक ऐसी लिनक्स मशीन की निगरानी करना चाहता था जिसमें कम रैम हो और जब वह भारी उपयोग के लिए चलती हो तो प्रति कंटेनर उपयोग का एक स्नैपशॉट लेना चाहती थी।
#!/usr/bin/env bash
threshold=$1
echo "$(date '+%Y-%m-%d %H:%M:%S'): Running free memory monitor with threshold $threshold%.."
while(true)
freePercent=`free -m | grep Mem: | awk '{print ($7/$2)*100}'`
do
if (( $(awk 'BEGIN {print ("'$freePercent'" < "'$threshold'")}') ))
then
echo "$(date '+%Y-%m-%d %H:%M:%S'): Free memory $freePercent% is less than $threshold%"
free -m
docker stats --no-stream
sleep 60
echo ""
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): Sufficient free memory available: $freePercent%"
fi
sleep 30
done
नमूना उत्पादन:
2017-10-12 13:29:33: थ्रेशोल्ड 30% के साथ मुफ्त मेमोरी मॉनिटर चलाना ।।
2017-10-12 13:29:33: पर्याप्त मुफ्त मेमोरी उपलब्ध: 69.4567%
2017-10-12 13:30:03: पर्याप्त मुफ्त मेमोरी उपलब्ध: 69.4567%
2017-10-12 16:47:02: मुफ्त मेमोरी 18.9387% 30% से कम है
आपका कस्टम कमांड आउटपुट
MacOS पर, आप इसके बजाय DTrace का उपयोग कर सकते हैं। "इंस्ट्रूमेंट्स" ऐप उसके लिए एक अच्छा GUI है, यह XCode afaik के साथ आता है।
'htop' यह देखने के लिए सबसे अच्छा कमांड है कि कौन सी प्रक्रिया कितनी रैम का उपयोग कर रही है .....
अधिक विस्तार के लिए http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
कृपया प्रश्न का उत्तर अवश्य दें। विवरण प्रदान करें और अपने शोध को साझा करें!
क्षमा करें, मैं यहां पहली बार हूं और केवल प्रश्न पूछ सकता हूं ...
उपयोग किए गए सुझाव:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
फिर:
grep mem_heap_B massif.out
...
mem_heap_B=1150976
mem_heap_B=1150976
...
यह एक ही top
समय में कमांड शो से बहुत अलग है :
14673 gu27mox 20 0 3280404 468380 19176 R 100.0 2.9 6:08.84 pwanew_3pic_com
Valgrind से मापा इकाइयों क्या हैं ??
/usr/bin/time -v ./test.sh
जवाब कभी नहीं - आप सीधे करने के लिए निष्पादन योग्य खिलाने चाहिए /usr/bin/time
की तरह:
/usr/bin/time -v pwanew_3pic_compass_2008florian3_dfunc.static card_0.100-0.141_31212_resubmit1.dat_1.140_1.180 1.140 1.180 31212
Command being timed: "pwanew_3pic_compass_2008florian3_dfunc.static card_0.100-0.141_31212_resubmit1.dat_1.140_1.180 1.140 1.180 31212"
User time (seconds): 1468.44
System time (seconds): 7.37
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 24:37.14
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): 574844
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 74
Minor (reclaiming a frame) page faults: 468880
Voluntary context switches: 1190
Involuntary context switches: 20534
Swaps: 0
File system inputs: 81128
File system outputs: 1264
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0