हर बार सीपीयू का उपयोग करना।


13

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

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

आउटपुट:

14.5

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

मैं आउटपुट में realtime cpuusage प्राप्त करना चाहता हूं। कृपया मेरी आज्ञा सुधारने में मेरी सहायता करें।


1
और सवाल है?
डेनिस करसेमेकर

साथ चल रहे कमांड चलाने की कोशिश करें time। मेरे सिस्टम पर यह केवल 0.165 लेता है।
depquid

कृपया मुझे संपादित कमांड दें।
केतन पटेल

कोशिश करें:time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
२०

अलग-अलग प्रणालियों में परीक्षण के बाद आउटपुट में कोई अंतर नहीं है
केतन पटेल

जवाबों:


13

आप सही हैं, topपहले पुनरावृत्ति पर गलत CPU उपयोग देने के लिए प्रकट होता है। आप इस मुद्दे पर इस तरह काम कर सकते हैं:

top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

यह निश्चित रूप से दोगुना समय लगेगा, लेकिन यह वैसे भी काम करेगा।

यदि आप अभी भी इसे तेजी से काम करना चाहते हैं, तो आप -dविकल्प का उपयोग कर सकते हैं , उदाहरण के लिए माप की कुल अवधि के लिए इसका आधा उपयोग करें:

top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

serverfault.com/a/436499/134517 भी इसे दो बार से ज्यादा समय लगेगा क्योंकि यह लगभग कोई नहीं के बजाय लगभग एक सेकंड लेगा।
ऊँची

Altendky द्वारा टिप्पणी के अलावा, यह भी स्पष्टीकरण के लिए टेर्डन द्वारा उत्तर दें कि समस्या पहले स्थान पर क्यों है।
रुस्लान

6

तकनीकी रूप से पहला topहमेशा समान मूल्य का उत्पादन नहीं करता है; यह केवल अंतिम बूट के बाद से औसत सीपीयू लोड को आउटपुट करता है। क्योंकि सीपीयू लोड की गणना करने topके लिए /proc/statआँकड़ों के डेल्टा का उपयोग किया जाता है , पहले मूल्य की गणना शून्य, उपज गलत (लेकिन WAD) परिणाम की तुलना करते हुए की जाती है।

यदि आप उपयोग नहीं करना चाहते हैं top, तो आप सीधे पार्स कर सकते हैं /proc/stat:

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) "%"}'

यह इस तरह से तेज़ और अधिक सटीक भी है।

आप इसका परीक्षण कर सकते हैं stress:

stress -c 1 -q &

और करो

killall stress

उपरांत।


अच्छा लगा। और अगर आपका कमांड 'सीपीयू' नामक फ़ाइल में रखा गया है, तो watchउस पर चलाया जा सकता है:watch -n1 "bash ./cpu"
ब्रेंट फॉस्ट

पार्स करने के लिए आपकी awk स्क्रिप्ट /proc/statबहुत अच्छी है, लेकिन यह शीर्ष की पहली पुनरावृत्ति के समान ही दोष है: यह पिछले बूट के बाद से औसत सीपीयू लोड को आउटपुट करता है, वर्तमान में नहीं।
भेड़िया

5

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

top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'

4

शायद psआउटपुट के आधार पर इसका उपयोग करें :

ps aux  | awk 'BEGIN { sum = 0 }  { sum += $3 }; END { print sum }

0

शेल में वॉच कमांड या लूप का उपयोग करें,

अर्थात watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"


एक ही बात घड़ी के साथ होती है
केतन पटेल

0

आप CPU उपयोग की परवाह क्यों करते हैं? लोड औसत एक बेहतर संकेत है:

cat /proc/loadavg

यदि आपको वास्तव में सीपीयू उपयोग की आवश्यकता है, तो पार्सिंग /proc/statशायद जाने का रास्ता है।


1
लोड औसत मूल रूप से सीपीयू उपयोग का एक अभिन्न अंग है (समय से विभाजित)। जब आप पूरी तरह से अलग-अलग उपयोग के मामलों में एक अंतर की तुलना में एक अभिन्न विशेषता कहेंगे [सब कुछ] का बेहतर संकेतक? इसके अलावा, /proc/statसीपीयू उपयोग के रूप में यह नहीं है, एक यह दो बार पढ़ने के बीच कुछ समय के साथ पढ़ने के लिए है और सीपीयू उपयोग प्राप्त करने के लिए कुछ गणना करते हैं। बस यही topकाम करता है।
रुस्लान

मैं गणित नहीं कर सकता, इसलिए मुझे स्वीकार करना होगा कि मैं वास्तव में अभिन्न और अंतर के बीच के अंतर को नहीं समझता: / "लोड औसत मूल रूप से सीपीयू उपयोग का एक समय अभिन्न है" - क्या यह वास्तव में है? AFAIK एक ऐसी प्रक्रिया है जो डी राज्य में लटकी हुई है, एक लोड वृद्धि का कारण बनती है, लेकिन कोई सीपीयू उपयोग नहीं। "आप क्यों कहेंगे ..." - ओपी यह नहीं कहता कि वह वास्तव में क्या हासिल करना चाहता है, इसलिए ईमानदार होना, मैं बस यह मानता हूं कि वह अपने सिस्टम लोड को मापना चाहता है और सोचा कि सीपीयू का उपयोग इसके लिए सबसे अच्छा संकेतक होगा। , इसलिए मैंने उसे औसत लोड करने के लिए निर्देशित किया।
मार्टिन वॉन विटिच

आपके लिंक से: "सिस्टम लोड औसत की गणना करता है क्योंकि लोड संख्या की घातीय / भारित चलती औसत।" और "सिस्टम लोड कम्प्यूटेशनल काम की मात्रा का एक उपाय है"। डी राज्य कोई कम्प्यूटेशनल काम नहीं ले रहा है। क्या प्रक्रिया है जो CPU समय का उपयोग करती है। इसलिए औसत लोड मूल रूप से समय का प्रतिशत है CPU कुछ समय के लिए निष्क्रिय नहीं था (जैसे, मिनट टू द मिनट)। और CPU उपयोग समय का प्रतिशत है CPU मिलीसेकंड के समय के पैमाने पर निष्क्रिय नहीं है - यानी हर बार जब आप इसे पढ़ते हैं और वर्तमान स्थिति को दर्शाते हैं तो अपडेट किया जाता है ।
रुस्लान

-2

sarकमांड का उपयोग करना

sar 1 10

इसका मतलब है: हर सेकंड में 10 बार परिणाम प्राप्त करें

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