سرفصل‌های آموزشی
آموزش لینوکس
آشنایی با مفهوم Load Average در لینوکس

آشنایی با مفهوم Load Average در لینوکس

Load Average (میانگین بار) به طور کلی مرتبط با میزان باری است که پروسه‌های فعال، در حال انتظار و غیرفعال روی CPU اعمال می‌کنند که در لینوکس با استفاده از کامندهای top ،w و uptime قابل دسترسی است:

$ w
 00:32:18 up 11:48,  1 user,  load average: 0.25, 0.12, 0.15
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
behzadmo tty7     :0               12:44   11:48m 11:52   0.05s /bin/sh /usr/li

همان‌طور که در بالا مشخص است، پس از اجرای کامند w میانگین بار (Load Average) در قالب ۳ عدد مختلف نشان داده می‌شود که این اعداد از چپ به راست نشانگر میانگین بار تقریبی در ۱ دقیقهٔ گذشته، ۵ دقیقهٔ گذشته و ۱۵ دقیقهٔ گذشته‌ هستند.

اگر فرض کنیم که سیستم ما حاوی ۱ عدد CPU است، 0.25 حاکی از آن است که طی ۱ دقیقهٔ گذشته به طور میانگین از ۲۵٪ منابع سیستم استفاده شده است؛ عدد بعدی، 0.12، نشانگر این است که طی ۵ دقیقهٔ گذشته به طور میانگین از ۱۲٪ منابع سیستم استفاده شده و  عدد 0.15 که در جایگاه آخر قرار دارد، بدان معنا است که طی ۱۵ دقیقهٔ گذشته به طور میانگین از ۱۵٪ منابع سیستمی استفاده شده است.

به عنوان مثالی دیگر، اگر در جایگاه دوم عدد 1.00 را مشاهده کنیم، این بدان معنا است که سیستم طی ۵ دقیقهٔ گذشته به طور میانگین از ۱۰۰٪  توان CPU استفاده کرده است اما این در حالی است که اگر این عدد بیش از 1.00 باشد، این مسئله حاکی از آن است که سیستم بیش از حد زیر بار است و تعداد پروسه‌هایی که نیاز به پردازش دارند بیش از توان CPU سیستم است.

حال اگر ما سیستمی داشته باشیم که بیش از یک CPU داشته باشد، مثلاً یک سیستم Quad-CPU، می‌توانیم میانگین بار را میان هسته‌های CPU تقسیم کنیم. به عبارت دیگر، اگر عدد 4.00 در جایگاه اول قرار گرفته باشد، این بدان معنا است که منابع سیستم به طور میانگین طی ۱ دقیقهٔ گذشته ۱۰۰٪ استفاده شده‌اند که این رقم از تقسیم کردن 4.00 بر تعداد هسته‌های Quad-CPU که برابر با ۴ است به دست آمده است.

    به خاطر داشته باشید
نوسانات میانگین بار که کوتاه‌مدت هستند، مثلاً طی ۱ دقیقهٔ گذشته، اصلاً مشکلی ایجاد نمی‌کنند اما اگر در بازه‌های ۵ و ۱۵ دقیقه شاهد میانگین بار زیادی باشیم (مثلاً بیش از عدد ۱)، این مسئله حاکی از آن است که در جایی از سیستم مشکلی وجود دارد.

آشنایی با پروسه‌های Background و Foreground
لینوکس از قابلیت پردازش Job در بک‌گراند و فورگراند پشتیبانی می‌کند.

    نکته

توجه داشته باشیم که در اینجا منظور از Job یک «کامند» است که از طریق ترمینال اجرا می‌شود.

کامندهای فورگراند به طور مستقیم از طریق شِل اجرا می‌شوند و زمانی که یک کامند فورگراند در حال اجرا است، دیگر کامندهای در صف می‌بایست منتظر بمانند تا شِل به آنها اجازهٔ اجرا دهد. زمانی که کامندها سریع اجرا شوند، در صف بودن کامندهای دیگر اصلاً مشکلی ایجاد نمی‌کند اما اگر کامندی اجرا شده باشد که تکمیل آن مستلزم صرف زمان نسبتاً زیادی باشد، این مسئله مشکل‌ساز خواهد شد!

در چنین مواقعی، می‌توان کامند مد نظر که تکمیلش نیازمند زمان زیادی است (مثلاً چند ساعت) را در بک‌گراند اجرا کرد و محیط شِل را برای دیگر تسک‌ها آزاد کرد. با اتخاذ چنین رویکردی، کامندهای اجرا شده در بک‌گراند با Priority (اولویت) پایین‌تری اجرا می‌شوند و همین مسئله منجر به این خواهد شد که هم‌زمان با اجرای کامند قرار گرفته در بک‌گراند، بتوان دیگر کامندها را نیز در ترمینال ارجا نمود.

به طور پیش‌فرض، تمامی کامندها در فورگراند اجرا می‌شوند و این در حالی است که با افزودن علامت & به کامند مد نظر، می‌توان آن را به بک‌گراند فرستاد. به عنوان مثال خواهیم داشت:

$ command &

با استفاده از کلیدهای ترکیبی CTRL-Z می‌توان یک کامند قرار گرفته در فورگراند را معلق نمود و همچنین با استفاده از کلیدهای ترکیبی CTRL-C می‌توان یک کامند قرار گرفته در فورگراند را پایان داد و با استفاده از کامندهای bg و fg، به ترتیب می‌توان یک پروسه را در بک‌گراند و فورگراند اجرا کرد.

آشنایی با ابزار jobs جهت مدیریت کامندها در لینوکس
در لینوکس ابزاری داریم تحت عنوان jobs که این امکان را به ما می‌دهد تا کلیهٔ Job یا کامندهایی که در بک‌گراند در حال اجرا هستند را مشاهده کنیم. جهت آشنایی بیشتر با کاربرد ابزار jobs در کنار پروسه‌های قرار گرفته در فورگراند و بک‌گراند، مثال زیر را در نظر می‌گیریم:

$ gedit temp.txt

همان‌طور که مشخص است، با استفاده از برنامه‌ای تحت عنوان gedit، فایلی تحت‌ عنوان temp.txt را جهت ویرایش باز می‌کنیم. این کامند در حال حاضر در فورگراند قرار دارد. حال با استفاده از دکمه‌های ترکیبی CTRL-Z، این کامند را متوقف می‌سازیم:

$ gedit temp.txt 
^Z
[1]+  Stopped                 gedit temp.txt

می‌بینیم که Stopped نشان از متوقف شدن کامند gedit دارد. حال اگر از کامند jobs استفاده کنیم، مجدد می‌بینیم که کامند gedit در حالت توقف قرار دارد:

$ jobs
[1]+  Stopped                 gedit temp.txt

می‌بینیم که خروجی کامند jobs صرفاً یک پروسه‌ هست که متوقف شده است که عدد ۱ هم به آن اختصاص داده شده است که اصطلاحاً به آن Job Number می‌گویند. حال دستور bg را وارد می‌کنیم:

$ bg
[1]+ gedit temp.txt &

از این پس، کامند gedit در بک‌گراند در حال اجرا خواهد بود و شاهد این ادعا هم اضافه شدن علامت & پس از آن است. اگر هم تعداد کامندها زیاد باشند، می‌توانیم با مشخص سازی Job Number، کامند مد نظر را هدف قرار داد:

$ bg %1

که در اینجا علامت % برای مشخص‌سازی شناسهٔ کامند ضروری است. حال مجدد دستور jobs را وارد می‌کنیم:

$ jobs
[1]+  Running                 gedit temp.txt &

می‌بینیم که وضعیت کامند gedit از حالت Stopped (متوقف شده) به Running (در حال اجرا) درآمده است. اگر هم بخواهیم کامندی که در بک‌گراند در حال اجرا است را اصطلاحاً Kill کنیم، می‌توانیم به صورت زیر عمل کنیم:

$ kill %1

پس از وارد کردن دستور فوق در ترمینال و اینتر کردن، کامندی با شناسهٔ ۱ متوقف خواهد شد. در صورتی هم که کامند فوق را Kill نکنیم و بخواهیم این کامند را از بک‌گراند به فورگراند باز گردانیم، صرفاً نیاز است تا کامند fg را وارد نماییم. اگر هم چندین کامند در بک‌گراند داشته باشیم، همان‌طور که قبلاً گفتیم با استفاده از علامت % و شناسهٔ کامند مد نظر، می‌توان دقیقاً کامند مد نظر را به فورگراند آورد:

$ fg %1

در مثال فوق، دستور fg %1 کامندی با شناسهٔ ۱ را به فورگراند خواهد برد. اگر هم بخواهیم از این برنامه خارج شویم، می‌توانیم از کلیدهای ترکیبی CTRL+C به صورت زیر استفاده نماییم:

^C

می‌بینیم که بلافاصله پس از فشردن کلیدهای ترکیبی CTRL+C و بدون نیاز به اینتر کردن، از برنامه‌ٔ gedit خارج خواهیم شد.

    به خاطر داشته باشید
پیش از این گفتیم که برای فرستادن یک کامند به بک‌گراند، ابتدا می‌بایست کلیدهای ترکیبی CTRL+Z را فشرده سپس از کامند bg استفاده نماییم. حال زمان‌هایی پیش می‌آید که قصد داریم از ابتدا کامندی را در بک‌گراند اجرا کنیم که در چنین مواقعی با افزودن علامت & در پایان کامند مد نظر، می‌توان به چنین چیزی دست یافت. در مثال بالا، با اجرای کامند & gedit temp.txt این کامند از ابتدا در بک‌گراند اجرا خواهد شد و محیط شِل برای اجرای سایر دستورات آزاد خواهند ماند.
online-support-icon