একবারে / প্রো / স্ট্যাট পড়ে শতকরা সিপিইউ ব্যবহারের গণনা করার কোনও উপায় আছে কি?


12

আমি অনুমান করি প্রশ্নটি হল, আমি একবার / প্রো / স্ট্যাটটি একবার পড়ে সিপিইউ ব্যবহারের শতাংশটি গণনা করতে পারি?

# head -1 /proc/stat
cpu  67891300 39035 6949171 2849641614 118251644 365498 2341854 0

আমি আইওওয়েট ব্যতীত কলামগুলি সংক্ষিপ্ত করার কথা ভাবছি (আমি কোথাও পড়ছিলাম যে এটি নিষ্ক্রিয় হিসাবে গণনা করা হয়েছে) এবং এটি আমাকে 100% দেবে এবং প্রতিটি স্বতন্ত্র কলামটি (কলাম / 100_কেন্দ্রিক) * 100 দ্বারা শতাংশে রূপান্তরিত হতে পারে।

  • ব্যবহারকারী: ব্যবহারকারী মোডে কার্যকর প্রক্রিয়াগুলি
  • দুর্দান্ত: ব্যবহারকারী মোডে নিস করা প্রক্রিয়াগুলি
  • সিস্টেম: কার্নেল মোডে সঞ্চালিত প্রক্রিয়াগুলি
  • নিষ্ক্রিয়: পাকান থাম্বস
  • iowait: I / O সম্পূর্ণ হওয়ার অপেক্ষায়
  • irq: সার্ভিসিং বাধা rup
  • softirq: সফ্টিমার্ক সার্ভিসিং
  • চুরি: অনৈচ্ছিক অপেক্ষা
  • অতিথি: একটি সাধারণ অতিথি চলছে
  • অতিথি_নিস: একটি দারুন অতিথির জন্য চলছে

এটি কি একটি ব্যবহারযোগ্য পদ্ধতি বা আমি পুরোপুরি ট্র্যাক থেকে দূরে আছি?

উত্তর:


11

আপনি সঠিক পথে আছেন, topএই উদ্দেশ্যে এই ফাইলটি ব্যবহার করেন। তবে আপনার এটি একাধিকবার পড়তে হবে।

ইউটিলাইজেশন হ'ল সময়ের সাথে সাথে ব্যবহারের একটি পরিমাপ। আপনি একবার এটি হোস্টের সেকেন্ডে আপটাইম জানার পরে এটি পড়তে পারেন, তারপরে বিভাজন করুন, তবে এটি আপনাকে মেশিনটি বুট করার পরে হোস্টের ইউটিলিটি রেট দেয়।

আপনি যদি 5 সেকেন্ডেরও বেশি হার চান, আপনি একবার ফাইলটি পড়তে পারবেন, 5 সেকেন্ডের জন্য ঘুমাবেন, আবার পড়বেন, গণনার পার্থক্যটি পাবেন এবং 5 দ্বারা বিভক্ত হয়েছিলেন।


6

আপনার পদ্ধতির সঠিক। আপনি কাঁচা ডেটা হিসাবে / proc / স্ট্যাট ব্যবহার করতে পারেন এবং উদাহরণস্বরূপ এটির সাথে rdtool খাওয়াতে পারেন। আমি নিজের মতো করে কিছু করেছি তাই আমি জানি 100% এটি সম্ভব। আপনি সুন্দরভাবে পুরো সিস্টেম লোড বা প্রতিটি কোর পৃথকভাবে গ্রাফ করতে পারেন।

এখানে আমার নিজের একটি কার্যকারী উদাহরণ: এখানে চিত্র বর্ণনা লিখুন

পুনর্নির্মাণ -> আপনি এটি করতে পারেন, এটি কেবলমাত্র প্রাথমিক গাণিতিক নয় এবং আমার গ্রাফগুলি এর একটি জীবন্ত উদাহরণ। ডেটা সংগ্রহের জন্য আমি র‌্যামডিস্কে স্থানীয়ভাবে অস্থায়ী ফাইলটিতে / প্রোক / স্টেটের একটি স্ন্যাপশট করি এবং তারপরে আমি প্রতি 1 মিনিটে ডেটা সংগ্রহ করার জন্য সেই ফাইলটি পার্স করি।

আমি কীভাবে ডেটা পার্স করব (ব্যাশ স্ক্রিপ্টের টুকরো):

cat=/bin/cat # others defined the same way
......

$cat /proc/stat > /ramdisk/tmp/stat

ssCpuRawUser=`$cat /ramdisk/tmp/stat|$grep "cpu " | $awk '{print $2}'`
ssCpuRawNice=`$cat /ramdisk/tmp/stat|$grep "cpu " | $awk '{print $3}'`
    #other columns follow ....... 

#the most important there is that it is an incrementing COUNTER.
if [ ! -f ${data_dir}/sys.cpu.rrd ];then
        $rrdtool create ${data_dir}/sys.cpu.rrd -s 60 \
        DS:ssCpuRawUser:COUNTER:300:0:1250000 \
        DS:ssCpuRawNice:COUNTER:300:0:1250000 \
        DS:ssCpuRawSystem:COUNTER:300:0:1250000 \
        DS:ssCpuRawIdle:COUNTER:300:0:1250000 \
        DS:ssCpuRawIOwait:COUNTER:300:0:1250000 \
        DS:ssCpuRawIRQ:COUNTER:300:0:1250000 \
        DS:ssCpuRawSoftIRQ:COUNTER:300:0:1250000 \
            RRA:AVERAGE:0.5:1:532800

fi

$rrdtool update ${data_dir}/sys.cpu.rrd N:$ssCpuRawUser:$ssCpuRawNice:$ssCpuRawSystem:$ssCpuRawIdle:$ssCpuRawIOwait:$ssCpuRawIRQ:$ssCpuRawSoftIRQ

# then in a loop each core the same way until all are parsed.

আপনি rrd ডাটাবেসের মধ্যে ডেটা পেতে পরে আপনি গ্রাফ করতে পারেন এবং আকাশ সীমা :) হয় http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html


আপনি কীভাবে ডেটা পার্স করবেন?
ew white

@ নিউ হোয়াইট -> আমি কীভাবে ডেটা পার্স করব তা দেখানোর জন্য আমি আমার উত্তর সম্পাদনা করেছি।
বার্তোমিয়েজ জার্জেকি

সুন্দর গ্রাফ! আপনার অনুপস্থিত কলাম টীকাটি সম্পর্কে: Askubuntu.com/a/120961/451886 । যদি এটি কোনও ভিএম-এ চলছে তবে সম্ভবত এটি "চুরি" কাউন্টার।
rkagerer 21

আরডটোল এবং রামডিস্কের জন্য +1!
দয়া

4

আপনি যদি অনেলিয়ার চান তবে এটি দেখতে এটির মতো হতে পারে:

echo $(echo '100'; echo $(echo '(';head -1 /proc/stat | awk '{print $5}'; sleep 1; echo '-';head -1 /proc/stat |  awk '{print $5}';echo ')/100') | bc -l) | bc -l

ফলাফল: 97.17000000000000000000

কিভাবে এটা কাজ করে:

echo $(echo '(';head -1 /proc/stat | awk '{print $5}'; sleep 1; echo '-';head -1 /proc/stat |  awk '{print $5}';echo ')/100')

( 1055057784 - 1055058055 )/100বিসি এই লাইন ফিড তারপর উত্পাদন করে । এর মতো কিছু থাকবে -7.84000000000000000000, তারপরে এটিকে কেবল আবদ্ধ করুন 100-$(value)এবং আবারও বিসি খাওয়ান

সেখানে: sleep #- 1 সেকেন্ড বিলম্ব, আপনি যদি এই মানটি পরিবর্তন করেন তবে মধ্যবর্তী ফলাফলটি সেকেন্ডের সংখ্যায় বিভক্ত করা উচিত। $5- man procএবং http://www.linuxhowtos.org/System/procstat.htm অনুযায়ী 5 ম ক্ষেত্র

এটি আপনার পক্ষে কাজ করে না তবে আমাকে জানান।


0

বা আপনি যদি পয়েন্ট অভের পরে মাত্র দুটি অঙ্ক নিয়ে খুশি হন তবে এগুলি অনেক সহজ এবং আরও পাঠযোগ্য:

 awk -v oldidle=$(awk '/cpu / {print $5}' /proc/stat; sleep 1) '/cpu / {perc=100-($5-oldidle)/100 ; printf "%s", perc}' /proc/stat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.