लिनक्स पर संपूर्ण सीपीयू उपयोग (जैसे 57%) कैसे प्राप्त करें [बंद]


197

मैं सोच रहा हूं कि आप सिस्टम सीपीयू उपयोग कैसे प्राप्त कर सकते हैं और उदाहरण के लिए बैश का उपयोग करके इसे प्रतिशत में प्रस्तुत कर सकते हैं।

नमूना उत्पादन:

57%

यदि एक से अधिक कोर हैं, तो औसत प्रतिशत की गणना की जा सकती है।


1
@julesanchez मान को कहीं और पाइप करने की आवश्यकता है, इसलिए यह एक इंट होना चाहिए
उपयोगकर्ता 1199739

शीर्ष करना> myfile.txt और पोस्ट-ट्रीटमेंट में अपना फ़िल्टर लागू करना, ठीक नहीं है?
JuSchz

11
एक कमांड जिसे sysstat की आवश्यकता नहीं है:ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
RFON

7
फिर से समझने पर मुझे समझ नहीं आया कि इस विषय को खारिज क्यों किया गया, क्या इसे बंद करने वाले कृपया इसका ध्यान रख सकते हैं?
जोनाथन एच।

3
मेरी समझ /proc/statबहुत सीमित है, लेकिन यह एक-लाइनर मेरे लिए काफी अच्छा काम करता है cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f%\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}':। % .2f के साथ आप उन डेसीमल की संख्या को नियंत्रित कर सकते हैं जिन्हें आप आउटपुट करना चाहते हैं, और sleep 1आप जिस समय को औसत से अधिक करना चाहते हैं, उसे सेट कर सकते हैं, अगर यह वही करता है जो मुझे लगता है कि यह करता है। आप इसे लूप करते हुए बैश में रख सकते हैं, इसे रियलटाइम में टेस्ट करने के लिए।
यति

जवाबों:


174

पर एक नज़र डालें cat /proc/stat

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

EDIT कृपया इसे कॉपी-पेस्ट करने या किसी गंभीर कार्य के लिए उपयोग करने से पहले टिप्पणी पढ़ें। यह परीक्षण नहीं किया गया था और न ही इसका उपयोग किया गया था, यह उन लोगों के लिए एक विचार है जो उपयोगिता स्थापित नहीं करना चाहते हैं या किसी भी वितरण में काम करने वाली चीज़ के लिए। कुछ लोग सोचते हैं कि आप कुछ भी "उपयुक्त-स्थापित" कर सकते हैं।

नोट: यह वर्तमान CPU उपयोग नहीं है, लेकिन सिस्टम बूटअप के बाद से सभी कोर में संपूर्ण CPU उपयोग है। यह वर्तमान CPU उपयोग से बहुत भिन्न हो सकता है। वर्तमान मान प्राप्त करने के लिए शीर्ष (या समान उपकरण) का उपयोग किया जाना चाहिए।

वर्तमान CPU उपयोग के साथ संभावित गणना की जा सकती है:

awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' \
<(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)

12
लेकिन आपको mpstat को इनस्टॉल करना होगा जैसे आप ऊपर की सलाह देते हैं। कई लोगों के पास वह लचीलापन नहीं है। cat / proc / stat तो पाइप आपके द्वारा सुझाए गए mpstat की तुलना में बहुत आसान है।
विमुदे

12
+1 समझ में नहीं आता कि एक और उपयोगिता को पार्स करने से बेहतर क्यों है/proc/stat
मोनिका प्लीज

9
प्रणाली + उपयोगकर्ता + निष्क्रिय = 100%। तो शायद कुछ इस तरह: grep 'cpu' / proc / stat | awk '{cpu_usage = ($ 2 + $ 4) * 100 / ($ 2 + $ 4 + $ 5)} END {प्रिंट cpu_usage "%"}}
vimdude

106
मुझे लगता है कि यह समाधान वर्तमान सीपीयू लोड को नहीं दिखाता है लेकिन सीपीयू शुरू होने के बाद से औसत सीपीयू लोड है।
इटियेन

11
@ जेलीग्रे, हाँ यह सही है। CURRENT cpu के उपयोग की गणना करने के लिए औसत नहीं, आपको $ 1 मान लेना होगा, फिर विलंब होगा तब $ 1 मान लें और अंतर देखें। यह वर्तमान सीपीयू उपयोग है।
vimdude

102

तुम कोशिश कर सकते हो:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'

11
जब भी मैं इस कमांड को चलाता हूं, मुझे सटीक समान आउटपुट ( 32.7%) मिलता है।
अलान्केशन १२

13
जब मैं उपयोग करता हूं तो अधिक सटीक परिणाम दिया जाता है top -bn2, लेकिन इसमें लंबा समय लगता है। मैंने जो पढ़ा है, उससे यह सटीक परिणाम प्राप्त करने का एकमात्र तरीका प्रतीत होता है।
ऐलनकेशन

7
top -bn1मेरे FC20 सिस्टम पर बेतहाशा गलत लगता है। top -bn2अच्छा काम करने लगता है।
मार्टिन टूरनोइज

24
इस उत्तर में कमांड उन प्रणालियों के लिए लिखा गया है जहां top -vरिटर्न procps-ng(जैसे, फेडोरा)। वहाँ भी procpsपाया जाता है, उदाहरण के लिए, उबंटू और CentOS, जहां कमांड काम नहीं करता है (हमेशा 100% इंगित करता है, क्योंकि सीपीयू के आंकड़े अलग-अलग स्वरूपित होने के साथ लाइन के कारण पार्सिंग विफल हो जाता है)। यहाँ एक संस्करण है जो दोनों कार्यान्वयनों के साथ काम करता है:top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
mklement0

2
साइड नोट: पर OSX, निम्नलिखित का उपयोग करें: top -l 2 -n 0 -F | egrep -o ' \d*\.\d+% idle' | tail -1 | awk -F% -v prefix="$prefix" '{ printf "%s%.1f%%\n", prefix, 100 - $1 }'
mklement0

38

पैकेज mpstatसे कोशिश करेंsysstat

> sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025)  02/10/2012  _x86_64_    (2 CPU)  

03:33:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:33:26 PM  all    2.39    0.04    0.19    0.34    0.00    0.01    0.00    0.00   97.03

फिर कुछ cutया grepआवश्यक जानकारी को पार्स करने के लिए:

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 -  $ 12}'a

1
मैं यह नहीं दिखाता कि यह कुल CPU
user1199739 है

मैं इसे 100% निष्क्रियता कहूँगा जो कि कुल CPU उपयोग (% में) है
पीटर स्वेन्सन

यह "उपयोग नहीं" प्रतिशत है। यह जवाब अच्छा था, grep तक | पूंछ | awk part ...
जोर्डनम

मैं इस awkहिस्से को बदल awk -F " " '{print (100 - $12)"%"}'देता हूँ : जो आउटपुट को स्वरूपित करता है जैसे वह चाहता था, लेकिन अन्यथा यह मुझे अच्छा लगता है।
दान फेगो

1
@ जोर्डनम ऑल ट्रुथ; मैं इसे अधिक मतदान कर रहा था क्योंकि यह काम करता है। मैं यह व्यक्तिगत रूप से करूँगा:mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }'
डैन फ़ेगो

22

मेरे समाधान के साथ एक वास्तविक प्रतिक्रिया को फेंक सकते हैं, जो पीटर लिलेंजबर्ग द्वारा प्रेरित था:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%

यह awk100 शून्य से 12 वें क्षेत्र (निष्क्रिय) का प्रिंट आउट लेने के लिए उपयोग करेगा , इसके बाद प्रतिशत चिह्न के साथ। awkयह केवल उस पंक्ति के लिए करेगा जहाँ 12 वें क्षेत्र में केवल संख्याएँ और बिंदु हैं ( $12 ~ /[0-9]+/)।

आप पांच नमूने भी ले सकते हैं, एक सेकंड के अलावा:

$ mpstat 1 5 | awk 'END{print 100-$NF"%"}'

इसे इस तरह से परखें:

$ mpstat 1 5 | tee /dev/tty | awk 'END{print 100-$NF"%"}'

14
"एमपीस्टैट 2 1 | ..." चलाने के लिए बेहतर है ताकि यह अंतिम 1 सेकंड के लिए आंकड़े दिखाए। अन्यथा, डिफ़ॉल्ट रूप से, mpstat शुरुआत से ही आँकड़े दिखाता है और समय के बढ़ने के साथ
सारंग

1
"mpstat। awk '$ 12 ~ / [0-9. हमने+/ {100 प्रिंट करें - $ 11"% "}" "मेरे लिए यह काम किया।
अकेलाInDark

@ सारंग आपका बहुत बहुत धन्यवाद !! अंत में मुझे वे परिणाम मिल सकते हैं जो conkyप्रदर्शित हो रहे हैं। दुर्भाग्य से, यह रेखा बहुत धीमी है, लगभग पूरे एक सेकंड तक निष्पादित करने के लिए।
वाक्यविन्यास

6
@syntaxerror यह वास्तव में 2 सेकंड लेता है क्योंकि यदि आप कमांड को देखते हैं तो आप यह देखते हैं कि पहला तर्क यह है कि यह अंतराल है, लेकिन यह केवल एक बार दूसरे तर्क के कारण निष्पादित होता है इसलिए यह 2 पूर्ण सेकंड तक इंतजार करता है जब तक कि यह परिणाम नहीं देता।
जोहान Bjäreholt

प्रश्न बंद हो गया है, इसलिए मेरा (आपके) समान उत्तर मिला है :-) आशा है कि आपको कोई आपत्ति नहीं है। आपकी तरह, मैं पीटर लेलेंजबर्ग के जवाब से प्रेरित था।
पीजे ब्रुनेट

16

संपादित करें: मैंने देखा कि किसी अन्य उपयोगकर्ता के उत्तर में निष्क्रिय फ़ील्ड 11 के बजाय 12 फ़ील्ड थी। awk को% निष्क्रिय फ़ील्ड के परिवर्तनशील होने के कारण अद्यतन किया गया है।

यह आपको वांछित आउटपुट मिलना चाहिए:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'

यदि आप एक पूर्णांक पूर्णांक चाहते हैं, तो आप प्रिंटफ का उपयोग कर सकते हैं:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'

2
mpstat 1 1 | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d",100 - $field) }'मेरे लिए बहुत अच्छा काम करता है, धन्यवाद। mpstat 1 1 पर ध्यान दें कि यह सुनिश्चित करने के लिए कि cpu का उपयोग एक दूसरे से अधिक नमूना है
chrishiestand

1
अगर आपके पास mpstat -o JSON -u 1 1 | jq '.sysstat.hosts[0].statistics[0]["cpu-load"][0].idle'
jq है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.