सीपीयू उपयोग realtime हो रही है


11

जब मैं cpu उपयोग प्राप्त करने के लिए कमांड का पालन करता हूं, तो मुझे अच्छा + उपयोगकर्ता सीपीयू उपयोग मिलता है।

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

आउटपुट:

14.5

यहां मुझे समस्या हो रही है कि आउटपुट शीर्ष कमांड पर निर्भर करता है और इस प्रकार यह शीर्ष कमांड के रूप में तुरंत नहीं बदलता है। इसलिए मुझे तुरंत सही सीपीयू नहीं मिल रहा है। यह समान आउटपुट देता है और बदलता नहीं है।

मैं आउटपुट में रियल-टाइम सीपीयू उपयोग प्राप्त करना चाहता हूं। कृपया मेरी आज्ञा सुधारने में मेरी सहायता करें।


वास्तविक समय की निगरानी askubuntu.com/questions/293426/…
कासिम

यह सरल बैश स्क्रिप्ट बस यही करती है: askubuntu.com/a/450136/243213
क्रेग वैन टोनर

जवाबों:


20

यदि आप एक सेकंड की देरी कर सकते हैं, तो यह CPU उपयोग को एक साधारण प्रतिशत के रूप में प्रिंट करेगा:

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

(एक-सेकंड की देरी के बिना, vmstatकेवल बूट के बाद से औसत मान प्रिंट कर सकते हैं।)


मुझे सटीक% (htop के साथ तुलना) नहीं देता है
लेप

1
आपको vmstat 1 2इस तरह का उपयोग करने की आवश्यकता है : echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')] अन्यथा आपका बूट के बाद सेvmstat मान देने वाला है जो संभवतः आपके बाद नहीं है।
जो

joe धन्यवाद यह काम करता है। कृपया पॉल, उत्तर को संपादित करें ताकि हर कोई सही कमांड लाइन देख सके
Pavlos Theodorou

कि, जो और Pavlos पकड़ने के लिए धन्यवाद! मैन पेज के उस हिस्से को मैंने नहीं देखा।
पॉल

9

यह एक ज्ञात मुद्दा है top। जैसा कि यहाँ बताया गया है , top -bबूट के बाद से 1 प्रतिशत रिटर्न रिटर्न, इसलिए हमें -n 2वर्तमान प्रतिशत प्राप्त करने के लिए कम से कम दो पुनरावृत्तियों ( ) की आवश्यकता है । चीजों को गति देने के लिए, आप dपुनरावृत्तियों के बीच योग को सेट कर सकते हैं 0.01topउपयोगकर्ता, सिस्टम प्रक्रियाओं और niceप्रक्रियाओं के बीच सीपीयू उपयोग को विभाजित करता है, हम तीनों का योग चाहते हैं। अंत में, आप grepCPU प्रतिशत युक्त लाइन और फिर gawkउपयोगकर्ता, प्रणाली और अच्छी प्रक्रियाओं का उपयोग करने के लिए उपयोग करते हैं:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Sar, mpstat ... आदि सहित हर दूसरी विधि 2/3% दिखाती है जबकि यह कमांड हमेशा 50% दिखाता है।
CMCDragonkai

@CMCDragonkai संख्या बदलनी चाहिए (मैंने अभी इसकी जाँच की है) क्या आप सुनिश्चित हैं कि आपने इसे सही तरीके से कॉपी / पेस्ट किया है? इसके अलावा, ध्यान दें कि कई सीपीयू के साथ सिस्टम पर, एकल CPU के topप्रतिशत के रूप में% उपयोग की रिपोर्ट करेगा । इसका मतलब है कि आप अक्सर बहुत अधिक प्रतिशत प्राप्त करेंगे। यहाँ बिंदु 9 देखें ।
टेराडॉन

मुझे लगता है कि यह आदेश मेरे सिस्टम के अनुकूल नहीं हो सकता है। लेकिन यह स्पष्ट है कि मेरे द्वारा की गई अन्य सभी विधियां मुझे 1/2/3% का प्रतिशत देती हैं, जो कि मैं देख रहा हूं कि क्या मैं htop चलाता हूं, जबकि यह कमांड मुझे एक विसंगति देता है।
CMCDragonkai

@CMCDragonkai कई सीपीयू के कारण है। आप या तो इसके द्वारा लौटाए गए नंबर को प्राप्त कर सकते हैं और कोर की संख्या से विभाजित कर सकते हैं या आप topइंटरेक्टिव मोड (सिर्फ रन top) में उपयोग कर सकते हैं और, एक बार वहां, हिट I(शिफ्ट + आई) को कोर द्वारा ब्रेकडाउन देखने के लिए कर सकते हैं।
टेराडॉन

मेरे पास केवल 1 सीपीयू है।
CMCDragonkai

7

मैंने कई तरीके आज़माए हैं, लेकिन यह मुझे सबसे सटीक लगता है:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'

यहीं से मिला


मेरे linux (Linux machine_name 4.4.0-127-Generic # 153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux) में कॉलम $ 15 नहीं है (/ खरीद / स्टेट फ़ाइल की सीपीयू लाइन) : सीपीयू 17411187 27478 594887 646652526 585551 0 31838 0 0 0
झोउ

1
सबसे बढ़िया उत्तर! धन्यवाद! मेरी विविधता: बिल्ली <(grep 'cpu' / proc / stat) <(नींद 0.1 && grep 'cpu' / proc / stat) | awk -v RS = "" "{printf"% .ff ", ($ 13- $ 2 + $ 15- $ 4) * 100 / ($ 13- $ 2 + $ 15- $ 4 + $ 16- $ 5)} '
maXp

MaXp अंतर यह है कि इसका प्रिंट एक एकल दशमलव के साथ गोल होता है: %.1fजो कि मेरी राय में अधिक मानव पठनीय और उपयोगी है यदि आप अन्य स्क्रिप्ट में उस आउटपुट का उपयोग करते हैं।
लेप

0

का उपयोग करें -n2। यह दो लाइनों का उत्पादन करेगा। पहली बार topप्रिंट करता है कि लाइन उस समय राज्य के लिए योग्य नहीं है। फिर पहली पंक्ति को अनदेखा करने के लिए अपनी स्क्रिप्ट को समायोजित करें।

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