Load Average چیست؟ نظارت بر استفاده از منابع سیستم در لینوکس
وقتی بعد از تحقیق و جستجوی زیاد بالاخره موفق به خرید سرور مجازی یا سرور اختصاصی دلخواه خود شدید، تازه کارتان شروع می شود. با توجه به این که قرار است از این سرور برای کارهای مختلفی مثل دیپلوی وبسایت یا اپلیکیشن استفاده کنید، مطمئناً مانیتورینگ هم باید یکی از مهم ترین اقدامات همیشگی شما باشد. اینجاست که معیارهایی مثل Load Average جلب توجه می کنند.
میانگین بار یا Load Average معیار مهمی برای ارزیابی میزان مصرف منابع سیستم است که با استفاده از چند دستور ساده می توانید از مقدار این معیار مطلع شوید و با یک سری روش های خاص، میانگین بار را در مقدار ایده آل نگه دارید.
با Load Average به راحتی می توانید عملکرد فرآیندها و میزان مصرف منابع را بررسی کنید و بدانید که سیستم شما چقدر درگیر برنامه ها و سرویس ها شده است. اگر به دنبال اطلاعات بیشتر و مفیدتری در مورد Load Average هستید، توصیه می کنیم که ادامه مقاله را از دست ندهید:
Load Average چیست؟
تعداد نخ ها یا فرآیندهایی که در حال حاضر توسط CPU در حال اجرا هستند یا منتظر CPU هستند با بار یا Load نشان داده می شود ولی چون میزان بار در هر لحظه تغییر می کند و بررسی این معیار اطلاعات چندان مفیدی به کاربر نمی دهد، بهترین کار این است که برای نظارت میزان استفاده از منابع از Load Average یا میانگین بار استفاده شود.
این میانگین بار برای 3 بازه زمانی 1 دقیقه اخیر، 5 دقیقه اخیر و 15 دقیقه اخیر محاسبه می شود. با این که در ادامه کمی بیشتر در مورد نحوه مانیتور منابع سیستم با Load Average و میزان مصرف cpu در لینوکس صحبت می کنیم ولی بهتر است در اینجا هم به دستور uptime اشاره کنیم. وقتی این دستور را اجرا کنید با 3 مقدار مختلف برای معیار Load Average روبرو می شوید:
اگر از چپ به راست بررسی کنیم:
0.03 -> میانگین بار CPU در 1 دقیقه اخیر
0.03 -> میانگین بار CPU در 5 دقیقه اخیر
0.01 -> میانگین بار CPU در 15 دقیقه اخیر
با ارزیابی این مقادیر می توانید عملکرد فرآیندهای سیستم را در بازه های مختلف بررسی کنید و با درک درست آنها، ایده های دقیق تری در مورد میزان استفاده از CPU و درگیری سیستم داشته باشید.
مثلاً اگر میانگین بار 1 باشد، به معنای این است که تقریباً 100 درصد CPU مصرف شده است ولی این برای وقتی بود که پردازنده ها تک هسته ای بودند و الان نسل سیستم هایی که پردازنده تک هسته ای دارند تقریباً منقرض شده است.
اگر فرض کنیم که پردازنده 2 هسته ای دارید و Load Average برابر با 1 است، می توانید اینگونه بگویید که یکی از هسته ها تقریباً بیکار است پس میزان استفاده از CPU، 50 درصد است.
یا فرض کنیم که پردازنده 4 هسته ای دارید و Load Average برابر با 1 است، می توانید اینگونه بگویید که که میزان استفاده از پردازنده 25 درصد است.
پس ایده تقریبی میزان استفاده از منابع با تقسیم میانگین بار به تعداد هسته های پردازنده به دست می آید. با این که این مقدار خیلی دقیق نیست ولی در کل می تواند برای نظارت منابع مفید باشد.
همچنین اگر می خواهید صاحب سروری شوید که از قدرت پردازشی لازم برای هندل کردن فرآیندها بربیایید، باید وظایفی که سرور قرار است بر عهده بگیرید را بررسی کنید. بعد از آن، با صرف هزینه کاملاً مقرون به صرفه از کار کردن با یک سرور مجازی لینوکس فوق العاده لذت ببرید و نگران استفاده بیش از حد از منابع و افت عملکرد سرور خود نباشید. پس توصیه میکنیم که فرصت را از دست ندهید و به صفحه خرید سرور مجازی لینوکس آسام سرور مراجعه کنید و بعد از بررسی پلن ها، بهترین پلن را برای خود سفارش دهید.
نحوه بررسی میزان Load Average سیستم لینوکس
روش ها و دستورات زیادی برای اطلاع از مقدار میانگین بار و میزان مصرف cpu در لینوکس وجود دارد که در این بخش رایج ترین آنها را بررسی می کنیم:
دستور uptime
دستور uptime که قبلاً هم به آن اشاره کردیم، رایج ترین روش بررسی Load Average است و برای استفاده از آن کافی است دستور زیر را اجرا کنید:
uptime
خروجی این دستور مدت زمان فعال بودن سیستم، تعداد کاربران فعال و Load Average ( 3 مقدار جدا) را نشان می دهد.
پس با یک دستور ساده می توانید متوجه شوید که میزان استفاده از CPU در 1 دقیقه، 5 دقیقه و 15 دقیقه اخیر (از چپ به راست) چگونه بوده است. با اینکه بعداً در مورد نحوه تفسیر مقدار Load Average صحبت می کنیم ولی میانگین بار بالا نشان می دهد که یک سیستم بیش از حد درگیر شده است و بسیاری از فرآیندها منتظر CPU هستند.
دستور top
این دستور نسبت به uptime مفیدتر است چون دید عمیق تری در مورد میزان استفاده از منابع سیستم ارائه می دهد:
top
کافی است به خروجی زیر دقت کنید:
با این دستور علاوه بر مدت فعالیت سیستم، تعداد کاربران فعال و مقادیر Load Average به اطلاعات دیگری هم دسترسی دارید. مثلاً اینکه چه فرآیندهایی توسط چه کاربرانی در حال اجرا هستند و چگونه از CPU و حافظه استفاده می کنند.
فایل proc/loadavg
همانطورکه از اسم آن هم مشخص است، این فایل حاوی مقادیر Load Average در بازه های 1، 5 و 15 دقیقه ای است و برای باز کردن این فایل کافی است دستور زیر را اجرا کنید:
cat /proc/loadavg
خروجی این دستور به صورت زیر است:
3 عدد اول نشان دهنده میانگین بار سیستم لینوکس هستند. عدد چهارم نسبت تعداد فرآیندهای در حال اجرا به کل فرآیندها و عدد پنجم هم آی دی آخرین فرآیند را نشان می دهد.
w
خروجی این دستور هم تقریباً مشابه uptime است منتها با این تفاوت که این دستور علاوه مدت فعالیت سیستم، تعداد کاربران فعال و مقادیر Load Average در مورد کاربران و فرآیندها هم اطلاعات مفیدی ارائه می دهد. به همین دلیل است که این دستور به عنوان ترکیبی از who، ps و uptime که جزو دستورات مهم لینوکس شناخته می شود:
w
خروجی دستور w هم به صورت زیر است:
ابزار glances
ابزار glances برای نظارت سیستم لینوکس استفاده می شود و عملکردی مشابه دستور top دارد. با اجرای این ابزار به یک نمای کلی از میزان مصرف منابع سیستم دسترسی پیدا می کنید. البته، این ابزار به طور پیش فرض در سیستم لینوکس نصب نشده است و برای استفاده از آن، اول باید آن را نصب کنید.
پس اگر تا حالا این ابزار را نصب نکرده اید، دستور زیر را اجرا کنید:
sudo apt-get install glances
بعد اینکه پروسه نصب تمام شد. کافی است ترمینال را باز کنید و دستور زیر را اجرا کنید:
glances
این دستور یک رابط کاربری ابزار glances را باز می کند و میانگین بار مربوط به هسته های پردازنده را نشان می دهد و علاوه بر آن در مورد مصرف حافظه و SWAP هم اطلاع رسانی می کند.
و برای اطلاع از Load Average کافیست به 3 مقدار که در عکس هم مشخص شده است، نگاه کنید.
حالا که با روش های نمایش میانگین بار سیستم و سرور لینوکس آشنا شدید، می توانیم وارد مرحله تفسیر مقادیر میانگین بار شویم:
نحوه تفسیر میانگین بار لینوکس
بیایید قبل از هر چیزی از یک جنبه کاملاً ساده به قضیه نگاه کنیم. فرض کنید که سیستم شما از یک CPU تک هسته ای استفاده می کند و Load Average آن به ترتیب زیر است:
1, 0.50, 1.70
در یک دقیقه اخیر، 1 فرآیند در حال اجرا بود و cpu سیستم کاملاً (100 درصد) مصرف شده است.
در 5 دقیقه اخیر، به طور میانگین 50 درصد CPU بیکار بود.
در 15 دقیقه اخیر cpu سیستم کاملاً مصرف شده است و به طور متوسط 70 درصد بار اضافی وجود داشت و این برای یک سیستم با CPU تک هسته ای خوب نیست چون نشان می دهد که تعداد پروسه هایی که به CPU نیاز دارند، بیشتر از توان CPU است. هر چقدر سربار اضافی CPU بیشتر باشد، افت سرعت و عملکرد سیستم شدیدتر می شود.
ولی وقتی با CPU چند هسته ای یا سیستمی با چند CPU روبرو هستیم، قضیه کمی فرق می کند:
چند پردازنده ای – دو یا چند CPU در یک سیستم کامیپوتری ادغام می شوند.
پردازنده چند هسته ای – یک CPU وجود دارد که این CPU خودش از دو یا چند هسته جدا (واحد پردازشی) تشکیل شده است. این هسته ها به صورت موازی با می کار می کنند.
چون ساختار و قدرت پردازشی این نوع سیستم ها با CPU تک هسته ای فرق می کند، مطمئناً تفسیر Load Average هم برای آنها متفاوت خواهد بود. مثلاً اگر میانگین بار سیستمی با تک CPU، دو باشد به این معنا است که بار اضافی آن 100 درصد است یعنی در طول دوره زمانی موردنظر، یک فرآیند از CPU استفاده می کرد و فرآیند دیگر هم منتظر آزاد شدن CPU بود.
اما اگر سیستمی 2 پردازنده داشته باشد و میانگین بار آن هم 2 باشد به معنای این است که در تمام آن دوره، هر دو فرآیند از CPU مختلف استفاده کردند و هیچ بار اضافی وجود نداشت یعنی مصرف منابع 100 درصدی. یا اگر سیستم 4 پردازنده داشته باشد، این دو فرآیند از CPU های مختلف استفاده می کنند و اجرا می شوند و دو پردازنده دیگر هم بیکار می مانند و این یعنی مصرف منابع 50 درصدی.
پس با این اوصاف اگر Load Average برابر 6 باشد، سیستمی که یک پردازنده دارد با بار اضافی بیش از حدی روبرو است که باعث افت عملکرد سیستم می شود. در حالی که اگر سیستم 8 پردازنده یا یک پردازنده 8 هسته ای داشته باشد، میانگین بار 6 کاملاً “خوب” تلقی می شود.
پس می توانیم نتیجه بگیریم که Load Average ایده آلی وجود ندارد. میانگین بار بهینه هر سیستم یا سرور با تقسیم بار به تعداد پردازنده یا تعداد هسته های CPU به دست می آید. اگر حاصل این تقسیم نزدیک به 1 باشد می توانید نتیجه بگیرید که در آن بازه زمانی از 100 درصد CPU استفاده کرده است و اگر کار خاصی انجام نداده اید تا جلوی این مصرف را بگیرید، سیستم شما به خاطر هر فرآیند اضافی با خطر تاخیر روبرو خواهد شد.
یک قانون سرانگشتی:
حداکثر بار = تعداد پردازنده یا هسته پردازنده سیستم
در یک سیستم چند هسته ای، میانگین بار شما نباید از تعداد پردازنده ها هسته های پردازنده سیستم بیشتر باشد.
پس تعداد هسته برای تفسیر Load Average خیلی مهم است. اگر می خواهید اطلاعات مربوط به پردازنده سیستم خود را دریافت کنید، می توانید از دستور زیر استفاده کنید:
cat /proc/cpuinfo
بهتر است به این نکته هم اشاره کنیم که موقع بررسی میانگین بار، بیشتر به میانگین بار 5 دقیقه و 15 دقیقه اخیر توجه کنید.
روش هایی برای کنترل Load Average بالا در سیستم لینوکس
دلایل زیادی برای افزایش میانگین بار وجود دارد که وجود فرآینده های آماده زیاد، بالا بودن درخواست ورودی / خروجی و کمبود حافظه از مهم ترین آنها هستند. برای کنترل کردن میزان مصرف cpu در لینوکس می توانید روش های زیر را امتحان کنید:
فرآیندهایی که باعث بار اضافی می شوند را شناسایی کنید.
برای این کار می توانید از دستور top استفاده کنید. این دستور تمام فرآیندهایی که در حال حاضر در سیستم یا سرور لینوکس اجرا می شوند را نشان می دهد و شما با بررسی دقیق آنها می توانید متوجه شویدکه هر کدام آنها از چه مقدار CPU استفاده می کنند. بعد می توانید با دستوراتی مثل kill هر فرایندی که باعث بار اضافی CPU می شود رامتوقف کنید:
kill <pid>
pid – آی دی یک فرآیند خاص
سخت افزار خود را ارتقاء دهید.
افزایش تعداد هسته های CPU و میزان حافظه رم باعث افزایش قدرت پردازشی سیستم می شود. با یک سیستم قدرتمند، فرآیندها به صورت یکنواخت توزیع می شوند و این باعث پایین آمدن Load Average و بهبود عملکرد CPU می شود.
مانیتور سیستم را فراموش نکنید.
اگر بتوانید مدام روی عملکرد سیستم را نظارت داشته باشید، مطمئناً در شناسایی فرآیندهایی که منابع زیادی را مصرف می کنند، سریع تر خواهید بود. top، atop htop و iotop از جمله ابزارهایی هستند که برای نظارت عملکرد سیستم استفاده می شوند.
اولویت فرآیندها را تنظیم کنید.
امکان ندارد که همه فرآیندها به یک اندازه مهم باشند پس بهترین کاری که می توانید انجام دهید این است که فرآیندها را بر اساس اولویتشان ترتیب بندی کنید تا CPU مدت زمان بیشتری در اختیار آنها قرار بگیرد. برای این کار می توانید از دستورات nice و renice استفاده کنید.
وضعیت شبکه را بررسی کنید.
اگر Load Average سرور شما بالا است می توانید با استفاده از دستور netstat تمام شبکه های متصل به سرور را شناسایی کنید. بالا بودن تعداد اتصالات هم می تواند بار اضافی سرور را افزایش دهد و باعث ایجاد تاخیر شود.
منابع اختصاص یافته به فرآیندها را کنترل کنید.
استفاده انحصاری چند فرآیند پرمصرف از منابع سیستم یکی از دلایل Load Average بالا است پس برای جلوگیری از این مسئله می توانید از دستور cgroups استفاده کنید. این دستور برای محدود کردن مقدار منابع مورداستفاده فرآیند یا گروهی از فرآیندها به کار می رود.
فرآیندهای کرش شده را مجدداً راه اندازی کنید.
فرآیندهایی که دچار کرش شده اند یا دیگر پاسخگو نیستند، بدون اینکه کار مفیدی انجام دهند باعث بالا رفتن میانگین بار می شوند. در وهله اول، کاری که باید انجام دهید این است که با استفاده از system یا هر ابزار مدیریت فرآیند دیگر، این فرآیندها را دوباره ری استارت کنید.
حافظه و منابع ورودی/خروجی را بهینه کنید.
بهینه سازی این عوامل، تاثیر زیادی در مقدار میانگین بار دارد که برای این کار می توانید از پارامترهای تنظیم هسته لینوکس مثل swappiness و dirty_ratio استفاده کنید.
به فکر متعادل سازی بار باشد.
برای توزیع یکنواخت بار کاری سیستم، تکنیک های متعادل سازی بار زیادی وجود دارد که استفاده از load balancer ها یا اجرا چند نمونه از یک سرویس در چند سرور از رایج ترین آنها هستند.
در کل، سرور ها و سیستم های تعبیه شده بیشتر از بقیه با مسائل مربوط به میانگین بار روبرو می شوند و به همین خاطر است که باید متناسب کاری که انجام می دهید یا ویژگی های سیستم از روش های بهینه سازی مناسب استفاده کنید.
کلام آخر
Load Average یکی از معیارهای مهم سیستم های لینوکس است که میزان استفاده از منابع سیستم را نشان می دهد. اگر با استفاده از دستورات و روش هایی که در این مقاله بررسی کردیم بتوانید میانگین بار را در حالت بهینه قرار دهید، سیستم یا سرور لینوکس شما به خاطر کمبود CPU دچار اختلال و تاخیر نمی شود.
از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.
سوالات متداول:
از کدام دستورات می توان برای مشاهده میانگین بار استفاده کرد؟
uptimre ،top و w از رایج ترین دستورات نمایش Load Average سیستم لینوکس هستند.