نمایش ۱۰ پردازشی که بیشترین مقدار CPU را به خود تخصیص داده اند

 نمایش ۱۰ پردازشی که بیشترین مقدار CPU را به خود تخصیص داده اند

 

top 10 CPU consuming process in an hour

در این مقاله قصد دارم نوشتن یک اسکریپت که تعداد ۱۰ پردازشی که در سیستم عامل بیشترین

مقدار CPU را مصرف کرده اند آموزش دهم .

همانگونه که مغز انسان کلیه فعالیت های ارادی و غیرارادی ما انسان ها را انجام می دهد ,

در کامپیوتر نیز مغز ماشین یعنی CPU , عملیات اجرایی مربوط به کلیه پردازش هایی که

از طرف کاربران یا از طرف سیستم عامل به اجرا در می آید را بعهده می گیرد .

همانگونه که در بدن انسان اگر مغز درست کار نکند , زندگی ما از تعادل خارج می شود ,

در کامپیوتر نیز چنانچه CPU بدرستی وظایفش را انجام ندهد , کامپیوتر یا server ما از تعادل خارج میگردد.

بعنوان یک ادمین , وظیفه ما این است که بتوانیم با درون نگری به وضعیت CPU

بتوانیم از صحت عملکرد ان آگاه شده  و چنانچه پردازش به CPU داده شد

که تمام انرژی آن را برای خود و اجرای خود در دست گرفته و اچازه نمی دهد

دیگر پردازش ها از آن استفاده نمایند , نیاز است که وارد عمل شده و بررسی های

لازم جهت بهبود عملکرد سیستم را برای ایجاد تعادل انجام دهیم .

در این مقاله اسکریپتی نوشته ام برای تعیین ده پردازش اولی که بیشترین

میزان استفاده از CPU سیستم را به خود تخصیص داده اند .

فرض من بر آن است که دستورات اولیه سیستم عامل لینوکس را آموخته اید و

چنانچه با دستوراتی که در این اسکریپت آمده آشنایی ندارید

پیشنهاد من این است که حتما کتاب لینوکس مقدماتی که در قسمت محصولات وجود دارد را تهیه فرمایید و مطالعه نمایید .

در اسکریپت زیر که نام آن process_cpu_usage.sh است , میخواهیم

طی یک ساعت یا ۶۰ دقیقه و هر ۶۰ ثانیه یک بار وضعیت مصرف cpu توسط ده پردازش اول را لیست  کنیم .

————————————————————————————————————————————————————————————————–

#!/bin/bash

#Name: process_cpu_usage.sh
#Description: Script to calculate cpu usage by processes for 1 hour

SECS=3600

UNIT_TIME=60

#Change the SECS to total seconds for which monitoring is to be performed.
#UNIT_TIME is the interval in seconds between each sampling

STEPS=$(( $SECS / $UNIT_TIME ))

echo Watching CPU usage… ;

for((i=0;i<STEPS;i++))
do
ps -eocomm,pcpu | tail -n +2 >> /tmp/cpu_usage.$$
sleep $UNIT_TIME
done
echo
echo CPU eaters :

cat /tmp/cpu_usage.$$ | \
awk ‘
{ process[$1]+=$2; }
END{
for(i in process)
{
printf(“%-20s %s\n”,i, process[i]) ;
}
}’ | sort -nrk 2 | head

rm /tmp/cpu_usage.$$
#Remove the temporary log file
————————————————————————————————————————-

بخش مهم اسکریپت بالا دستور   ps -eocomm,pcpu است که   نام پردازش و میزان مصرف CPU

را به درصد , به ترتیب نمایش می دهد . به ازاء هر پردازش یک خط در فایل $$.cpu_usage ایجاد می گردد.

علامت $$ در انتهای نام فایل cpu_usage  برای دادن پسوند به فایل بر اساس process ID می باشد.

مثلا اگر process ID  پردازشی که در لظحه اجرای این برنامه اجرا می گردد دارای مقدار ۲۳۴۶  باشد

آنگاه نام فایل بصورت  cpu_usage.2346 خواهد بود.

از آنجاییکه قرار است طی مدت یک ساعت و هر ۶۰ ثانیه یک بار  به مشاهده پردازش ها بپردازیم , لذا در

 حلقه for loop این عمل را انجام داده ایم .

 دستور tail  -n +2  باعث میشود خروجی ایجاد شده در فایل cpu_usage به شکلی نوشته شود که

header از خود فرمانCPU% جدا شود تا خواناتر باشد .

به جهت نمایش خروجی فایل cpu_usage , از دستور cat  استفاده کردیم و با استفاده از دستور awk

 خروجی را بصورتیکه در هر خط نام پردازش و با فاصله ای میزان مصرف cpu در آن باشد و با مرتب سازی

بر اساس بیشترین میزان مصرف تا کمترین میزان مصرف cpu که با دستور sort  -nrk 2 نشان داده ایم

استفاده شده است .

چنانچه برنامه بالا را بعد از اجرایی کردن یعنی دادن chmod 755  process_cpu_usage  ؛ در خط فرمان اجرا کنیم

خروجی ای شبیه زیر ایجاد می شود :

$ ./pcpu_usage.sh
Watching CPU usage…
CPU eaters : Xorg 20
firefox-bin 15
bash 3
evince 2
pulseaudio 1.0
pcpu.sh 0.3
wpa_supplicant 0
wnck-applet 0
watchdog/0 0
usb-storage 0

 

امیدوارم این اسکریپت را نوشته و اجرا نمایید و امیدوارم که برای شما مفید واقع گردد.

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *