লিনাক্সে কীভাবে সামগ্রিক সিপিইউ ব্যবহার (যেমন 57%) পাবেন [বন্ধ]


194

আমি ভাবছি যে আপনি কীভাবে সিস্টেমের সিপিইউ ব্যবহার পেতে পারেন এবং উদাহরণস্বরূপ ব্যাশ ব্যবহার করে এটি শতাংশে উপস্থাপন করতে পারেন।

নমুনা আউটপুট:

57%

একাধিক কোর থাকলে, যদি গড় শতাংশকে গণনা করা যায় তবে এটি চমৎকার হবে।


1
@ জুলেসানচেজ মানটি অন্য কোথাও পাইপ করা দরকার, সুতরাং এটি অবশ্যই অবশ্যই একটি ব্যবহারকারী হতে হবে
ব্যবহারকারী 1199739

শীর্ষস্থানীয় করছেন> myfile.txt এবং চিকিত্সার পরে আপনার ফিল্টার প্রয়োগ করা ঠিক আছে না?
জুস্চ্জ

11
একটি কমান্ড যার জন্য সিস্টেস্ট্যাট লাগবে না:ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
আরফোন

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

সম্পাদনা করুন দয়া করে এটিকে অনুলিপি করার আগে মন্তব্যগুলি পড়ুন বা কোনও গুরুতর কাজের জন্য এটি ব্যবহার করুন। এটি পরীক্ষা করা হয়নি বা ব্যবহার করা হয়নি, এটি এমন একটি ধারণা যাঁরা কোনও ইউটিলিটি ইনস্টল করতে চান না বা এমন কোনও কিছুর জন্য যা কোনও বিতরণে কাজ করে। কিছু লোক মনে করে যে আপনি যে কোনও কিছু "ইনস্টল করে নিতে পারেন"।

দ্রষ্টব্য: এটি এখনকার সিপিইউ ব্যবহার নয়, তবে সিস্টেম বুটআপের পর থেকে সমস্ত কোরে সামগ্রিক সিপিইউ ব্যবহার। এটি বর্তমানের সিপিইউ ব্যবহারের থেকে খুব আলাদা হতে পারে। বর্তমান মান শীর্ষ পেতে (বা অনুরূপ সরঞ্জাম) ব্যবহার করা আবশ্যক।

বর্তমান সিপিইউ ব্যবহারের সাথে এইটি সম্ভাব্যভাবে গণনা করা যেতে পারে:

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
তবে আপনাকে এমপিস্ট্যাট ইনস্টল করতে হবে যেমন আপনি উপরে সুপারিশ করেছেন। অনেকের মধ্যে নমনীয়তা থাকে না। বিড়াল / প্রকোপ / স্ট্যাট তখন আপনার প্রস্তাবিত এমপিস্ট্যাটের চেয়ে পাইপটি অনেক সহজ।
vimdude

12
+1 বুঝতে পারছেন না কেন অন্য ইউটিলিটি /proc/stat
পার্সিংয়ের

9
সিস্টেম + ব্যবহারকারী + নিষ্ক্রিয় = 100%। সুতরাং সম্ভবত এর মতো কিছু: গ্রেপ 'সিপিইউ' / প্রোক / স্ট্যাট | awk '{cpu_usage = ($ 2 + $ 4) * 100 / ($ 2 + $ 4 + $ 5)} সমাপ্তি p cpu_usage "%"} "মুদ্রণ করুন
ভিমডুড

106
আমি মনে করি যে এই সমাধানটি বর্তমান সিপিইউ লোডটি দেখায় না তবে সিপিইউ শুরু হওয়ার পর থেকে গড় সিপিইউ লোড দেখায়।
এটিয়েন

11
@ জেলিয়াগ্র্রে, হ্যাঁ ঠিক আছে। CURRENT সিপিইউ ব্যবহারের গড় গড় গণনা করতে আপনাকে $ 1 মান নিতে হবে তারপরে বিলম্ব করতে হবে তারপর $ 1 মান নিতে হবে এবং পার্থক্যটি দেখতে হবে। এটিই এখনকার সিপিইউ ব্যবহার।
ভিমডুড

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পাওয়া গেছে, যেমন, উবুন্টু এবং সেন্টোস, যেখানে কমান্ডটি কাজ করে না (সর্বদা 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 }'
এমকিলেমেন্ট 0

2
সাইড নোট: উপর ওএসএক্স নিম্নলিখিত ব্যবহার করুন: 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

চেষ্টা mpstatsysstatপ্যাকেজ থেকে

> 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
আমি
এইটি

আমি এটি 100-% অলস বলব যা মোট সিপিইউ ব্যবহার (% তে)
পিটার সোভেনসন

এটি শতাংশ "ব্যবহৃত হয়নি"। এই উত্তরটি গ্রেপ না হওয়া পর্যন্ত ভাল ছিল লেজ |
অদ্ভুত

আমি এই 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%

এটি awk12 ম ক্ষেত্রের 100 টি বিয়োগ ক্ষেত্রটি (নিষ্ক্রিয়) মুদ্রণ করতে ব্যবহার করবে , এর পরে শতাংশের চিহ্ন সহ। 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 সেকেন্ডের পরিসংখ্যান দেখায়। অন্যথায়, ডিফল্টরূপে, এমপিস্ট্যাট শুরু থেকেই পরিসংখ্যানগুলি দেখায় এবং সময়ের অগ্রগতির সাথে এটি খুব বেশি পরিবর্তন হয় না
সরং

1
"এমপিস্ট্যাট | awk '$ 12 ~ / ছেল্লি -9. + ++/ 100 100 - {11"% "}'" আমার জন্য এই কাজটি করে।
অ্যালোনইনডার্ট

@ সারং আপনাকে অনেক ধন্যবাদ !! শেষ পর্যন্ত আমি ফলাফলগুলিও conkyপ্রদর্শন করতে পারি যা পাশাপাশি প্রদর্শিত হয়। দুর্ভাগ্যক্রমে, এই লাইনটি বেশ ধীর গতিতে প্রায় এক সেকেন্ডে কার্যকর হতে চলেছে।
বাক্য গঠন

6
@ সাইন্ট্যাক্সরর এটি ঠিক ২ সেকেন্ড সময় নেয় কারণ আপনি যদি কমান্ডটি দেখেন তবে আপনাকে দেখতে সাহায্য করবে যে প্রথম যুক্তিটি হ'ল এটি অন্তরাল কিন্তু এটি কেবলমাত্র দ্বিতীয় যুক্তির কারণে একবার সম্পাদন করে তাই ফলাফলটি না ফেরানো পর্যন্ত এটি পুরো 2 সেকেন্ড অপেক্ষা করে।
জোহান বিজেরেহল্ট

প্রশ্নটি বন্ধ, সুতরাং আমার (অনুরূপ) আপনার উত্তরটি যুক্ত করুন :-) আশা করি আপনি আপত্তি করবেন না। আপনার মতো আমিও পিটার লিলজেনবার্গের উত্তরে অনুপ্রাণিত হয়েছি।
পিজে ব্রুনেট

16

সম্পাদনা: আমি লক্ষ্য করেছি যে অন্য ব্যবহারকারীর জবাবতে% অলসটি ক্ষেত্রের 11 এর পরিবর্তে 12 টি ক্ষেত্র ছিল The 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) }'ধন্যবাদ আমার জন্য দুর্দান্ত কাজ করে সিপিইউ ব্যবহারটি সেকেন্ডের জন্য নমুনা তৈরি হয়েছে তা নিশ্চিত করতে এমপিএসটিট 1 1 নোট করুন
ক্রিশ্চ্যানস্ট্যান্ড

1
আপনার যদি jq থাকে:mpstat -o JSON -u 1 1 | jq '.sysstat.hosts[0].statistics[0]["cpu-load"][0].idle'
nyet
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.