وقتی مصرف CPU یا RAM سرور بالا میره، معمولا اولین چیزی که متوجهش میشیم کند شدن سایتها، دیر جواب دادن سرویسها یا حتی ارورهای مختلفه.
اگر این وضعیت ادامه پیدا کنه، فشار بیشتری به سرور وارد میشه و ممکنه بعضی سرویسها از دسترس خارج بشن.
به همین دلیل کاهش مصرف منابع سرور فقط برای بهتر شدن سرعت نیست؛ بلکه روی پایداری و عملکرد کلی سرور هم تاثیر مستقیم داره.
در این مقاله از بلاگ رهام کلود، خیلی ساده و کاربردی میخوایم بررسی کنیم که چطور میتونید مصرف CPU و RAM سرور رو کاهش بدید، دلیل مصرف بالای منابع رو
پیدا کنید و جلوی هدر رفتن منابع رو بگیرید.
فهرست موضوعات:
- دلایل بالا رفتن مصرف CPU و RAM
- مشخص کردن سرویس های usage بالا
- غیرفعالسازی سرویسهای غیرضروری
- مدیریت پردازشهای همزمان
- بررسی افزونهها و برنامههای اضافی
- بهینهسازی دیتابیس
- کش را جدی بگیرید
- بررسی Cron Jobها
- مصرف RAM و مصرف Swap
- بررسی لاگها
- تنظیم وبسرور متناسب با نیاز
- زیر نظر داشتن مصرف منابع
- آیا ارتقا همشگی منابع درست هست؟
- نتیجه گیری
- سوالات متداول
دلایل بالا رفتن مصرف CPU و RAM
قبل از اینکه بخواید مصرف منابع رو کم کنید، بهتره بدونید اصلا چه چیزی باعث افزایش مصرف شده.
بالا بودن مصرف CPU و RAM همیشه به معنی ضعیف بودن سرور نیست. گاهی یک برنامه، سایت یا سرویس خاص داره بیشتر از حد معمول منابع مصرف میکنه.
برای مثال، ممکنه یک سایت وردپرسی به خاطر افزونههای زیاد یا اجرای تعداد زیادی پردازش همزمان، CPU زیادی مصرف کنه.
از طرف دیگه، یک سرویس که مدت زیادی در حال اجراست ممکنه RAM زیادی اشغال کنه یا یک اسکریپت مشکلدار باعث ایجاد پردازشهای تکراری بشه.
ترافیک ناگهانی، حملات رباتی، کوئریهای سنگین دیتابیس، تنظیمات نامناسب سرویسها و حتی اجرای Cron Jobهای غیرضروری هم میتونن باعث افزایش مصرف منابع بشن.
مشخص کردن سرویس های usage بالا
یکی از اشتباهات رایج اینه که بدون بررسی، شروع به تغییر تنظیمات سرور میکنیم.
در حالی که اولین قدم برای کاهش مصرف منابع سرور اینه که بفهمید دقیقا کدوم پردازش بیشترین CPU یا RAM رو مصرف میکنه.
در لینوکس میتونید از ابزارهایی مثل top یا htop استفاده کنید.
این ابزارها لیست پردازشهای فعال رو نشون میدن و مشخص میکنن هر پردازش چه مقدار CPU و RAM مصرف میکنه.
برای مثال اگر ببینید PHP-FPM بخش زیادی از CPU رو مصرف میکنه، احتمالا باید سراغ سایتها، اسکریپتها یا درخواستهایی برید که توسط PHP اجرا میشن.
اگر MySQL مصرف بالایی داره، ممکنه مشکل از کوئریهای سنگین یا ساختار نامناسب دیتابیس باشه.
در ویندوز سرور هم میتونید از Task Manager یا ابزار Resource Monitor کمک بگیرید تا پردازشهای پرمصرف رو پیدا کنید.
غیرفعالسازی سرویسهای غیرضروری
خیلی وقتها روی سرور سرویسهایی اجرا میشن که اصلا مورد استفاده نیستن.
هر سرویس فعال، مقداری از منابع سیستم رو مصرف میکنه و در بعضی شرایط میتونه باعث افزایش تعداد پردازشها و مصرف RAM بشه.
اگر یک سرویس واقعا مورد نیاز نیست، بهتره غیرفعال بشه.
البته قبل از انجام این کار باید مطمئن بشید که سرویس موردنظر وابستگی مهمی نداره؛ چون غیرفعال کردن اشتباه یک سرویس میتونه باعث اختلال در سایت یا برنامههای دیگه بشه.
برای مثال اگر روی یک سرور فقط وبسایت میزبانی میشه و یک سرویس خاص هیچ استفادهای نداره، اجرای دائمی اون فقط منابع سرور رو هدر میده.
مدیریت پردازشهای همزمان
گاهی مشکل اصلی تعداد زیاد درخواستها و پردازشهای همزمانه.
این موضوع مخصوصا روی سرورهایی که چندین سایت یا برنامه روشون اجرا میشه بیشتر دیده میشه.
برای مثال در PHP-FPM، Apache یا بعضی سرویسهای مشابه، تنظیمات مربوط به تعداد Workerها و پردازشهای همزمان اهمیت زیادی داره.
اگر این مقادیر بیش از ظرفیت واقعی سرور تنظیم شده باشن، تعداد زیادی پردازش میتونن همزمان RAM و CPU رو درگیر کنن.
از طرف دیگه، اگر این مقادیر خیلی پایین باشن، درخواستها ممکنه در صف قرار بگیرن و سایت کند بشه.
پس هدف فقط کم کردن تعداد پردازشها نیست؛ باید تنظیمات متناسب با مقدار RAM، CPU و میزان ترافیک سرور انجام بشه.
بررسی افزونهها و برنامههای اضافی
اگر روی سرور سایتهای وردپرسی میزبانی میکنید، افزونهها یکی از مواردی هستن که باید بهشون توجه داشته باشید.
همه افزونهها مشکلساز نیستن، اما بعضی افزونهها میتونن پردازشهای زیادی ایجاد کنن یا درخواستهای سنگینی به دیتابیس بفرستن.
مثلا یک افزونه آمارگیری ممکنه به صورت مداوم اطلاعات جمعآوری کنه. یا یک افزونه بکاپ، در زمان اجرای بکاپ مقدار زیادی CPU و Disk I/O مصرف کنه.
در چنین شرایطی بهتره افزونهها و سرویسهایی که واقعا استفاده نمیشن حذف یا غیرفعال بشن و موارد پرمصرف هم بررسی بشن.
بهینهسازی دیتابیس
یکی از دلایل مهم افزایش مصرف منابع، دیتابیسهای سنگین و کوئریهای بهینهنشده هستن.
وقتی یک برنامه برای دریافت اطلاعات، کوئریهای زیادی اجرا میکنه یا روی جدولهای بزرگ جستجوهای سنگین انجام میده، CPU و RAM سرور هم بیشتر درگیر میشن.
برای همین فقط بررسی مصرف CPU کافی نیست.
اگر دیدید MySQL یا MariaDB مصرف بالایی داره، باید کوئریهای سنگین، جدولهای بزرگ، Indexها و درخواستهای پرتکرار رو هم بررسی کنید.
مثلا فرض کنید یک فروشگاه اینترنتی چند هزار محصول داره، اما جستجوی محصولات بدون Index مناسب انجام میشه.
هر بار که کاربر جستجو میکنه، دیتابیس مجبور میشه حجم زیادی از اطلاعات رو بررسی کنه و همین موضوع میتونه فشار زیادی به سرور وارد کنه.
کش را جدی بگیرید
کش یکی از سادهترین راهها برای کم کردن پردازشهای تکراریه.
وقتی یک صفحه یا اطلاعات مشخص چندین بار درخواست میشه، لازم نیست هر بار سرور همه مراحل رو از اول انجام بده.
در سایتهای وردپرسی میتونید از سیستمهای کش مناسب استفاده کنید.
در سطح سرور هم بسته به ساختار سرویس، استفاده از OPcache، Redis یا سایر روشهای Cache میتونه تعداد پردازشهای تکراری رو کمتر کنه.
مثلا اگر یک صفحه سایت روزانه هزاران بار بازدید میشه، بهتره سرور مجبور نباشه برای هر درخواست دوباره PHP رو اجرا کنه و اطلاعات رو از دیتابیس دریافت کنه.
کش میتونه بخشی از این فشار رو کم کنه.
بررسی Cron Jobها
Cron Jobها برای اجرای خودکار وظایف خیلی کاربردی هستن، اما اگر تعداد زیادی Cron بدون برنامهریزی مناسب روی سرور اجرا بشه، میتونه باعث مصرف بالای CPU و RAM بشه.
مثلا ممکنه یک اسکریپت هر یک دقیقه اجرا بشه، در حالی که اجرای اون هر ۱۵ دقیقه یا حتی هر ساعت کافی باشه.
اگر چندین سایت روی سرور داشته باشید، همین پردازشهای کوچک میتونن در مجموع فشار قابل توجهی ایجاد کنن.
پس بهتره Cron Jobهای فعال رو بررسی کنید و زمان اجرای اونها رو متناسب با نیاز واقعی تنظیم کنید.
مصرف RAM و مصرف Swap
در سرورهای لینوکسی ممکنه وقتی RAM پر میشه، سیستم از Swap استفاده کنه.
Swap در واقع بخشی از فضای Disk هست که سیستم میتونه در شرایط کمبود RAM از اون استفاده کنه.
استفاده محدود از Swap میتونه جلوی بعضی مشکلات رو بگیره، اما Swap جای RAM واقعی رو نمیگیره.
اگر سرور دائما در حال استفاده سنگین از Swap باشه، عملکرد سیستم میتونه به شکل محسوسی کاهش پیدا کنه.
بنابراین اگر مصرف RAM همیشه بالاست، بهتره دلیل اصلی مصرف زیاد رو پیدا کنید؛ نه اینکه فقط مقدار Swap رو افزایش بدید.
بررسی لاگها
گاهی افزایش مصرف CPU نتیجه یک مشکل عادی در سایت نیست.
ممکنه یک اسکریپت وارد Loop شده باشه، یک ربات تعداد زیادی درخواست ارسال کنه یا حتی یک سرویس دچار خطا شده باشه و دائما دوباره اجرا بشه.
بررسی لاگهای سیستم، وبسرور و برنامهها میتونه سرنخ خوبی به شما بده.
مثلا اگر یک IP خاص در مدت کوتاهی تعداد بسیار زیادی درخواست به سایت ارسال کنه، ممکنه با یک ربات یا حمله روبهرو باشید.
در این شرایط، فقط افزایش منابع سرور راهحل مناسبی نیست و بهتره منبع اصلی فشار هم کنترل بشه.
تنظیم وبسرور متناسب با نیاز
Apache، Nginx و سایر وبسرورها تنظیمات مختلفی برای مدیریت Connectionها و پردازشهای همزمان دارن.
اگر این تنظیمات بدون توجه به منابع سرور انجام بشن، ممکنه تعداد زیادی پردازش همزمان ایجاد بشه و RAM یا CPU بیش از حد درگیر بشه.
برای مثال روی یک VPS کوچک، تنظیمات مناسب با یک سرور دارای منابع بالا یکسان نیست.
بهتره تنظیمات وبسرور رو بر اساس تعداد سایتها، میزان بازدید و منابع واقعی سرور انجام بدید.
زیر نظر داشتن مصرف منابع
کاهش مصرف منابع سرور یک کار یکباره نیست. ممکنه امروز مصرف CPU کاملا عادی باشه، اما چند هفته بعد با افزایش ترافیک یا نصب یک برنامه جدید، وضعیت تغییر کنه.
به همین دلیل بهتره مصرف CPU، RAM، Disk I/O، Load Average و سایر شاخصهای مهم رو به صورت منظم بررسی کنید.
ابزارهای مانیتورینگ کمک میکنن قبل از اینکه مشکل جدی بشه، متوجه افزایش مصرف منابع بشید.
برای مثال اگر مصرف CPU معمولا حدود ۳۰ درصد باشه و ناگهان چند ساعت به بالای ۹۰ درصد برسه، این تغییر میتونه یک هشدار مهم باشه و ارزش بررسی داره.

فرض کنید یک سرور مجازی با ۴ گیگابایت RAM دارید که چند سایت وردپرسی روی اون میزبانی میشن.
بعد از مدتی متوجه میشید مصرف RAM به صورت دائمی بالای ۹۰ درصد قرار داره و CPU هم در ساعات شلوغ به ۱۰۰ درصد نزدیک میشه.
در بررسی اولیه مشخص میشه چند افزونه غیرضروری روی سایتها فعالن، Cron Jobهای زیادی هر چند دقیقه اجرا میشن و بعضی صفحات سایت هم بدون Cache تولید میشن.
با حذف افزونههای غیرضروری، تنظیم مجدد Cron Jobها، فعال کردن Cache و بررسی پردازشهای PHP ممکنه بخش زیادی از فشار روی سرور کم بشه.
نکته مهم اینه که در این مثال، قبل از ارتقای سرور، مشکل اصلی بررسی شده.
اگر بعد از بهینهسازی هنوز منابع کافی نباشه، اون موقع ارتقای RAM یا CPU میتونه تصمیم منطقیتری باشه.
آیا ارتقا همشگی منابع درست هست؟
نه. افزایش منابع همیشه اولین راهحل نیست.
اگر یک برنامه مشکلدار دارید که CPU زیادی مصرف میکنه، اضافه کردن CPU فقط باعث میشه برای مدتی مشکل کمتر دیده بشه.
اول باید مشخص کنید منابع دقیقا کجا مصرف میشن.
اگر بعد از بهینهسازی همچنان مصرف منابع بالا باشه و این مصرف به خاطر افزایش واقعی ترافیک یا تعداد کاربران باشه، اون موقع ارتقای منابع تصمیم منطقیتریه.
در واقع بهتره بین بهینهسازی سرور و ارتقای منابع سرور تفاوت قائل بشید.
خیلی وقتها با یک تنظیم درست یا پیدا کردن یک پردازش اضافی، بدون پرداخت هزینه بیشتر میتونید عملکرد سرور رو بهتر کنید.
نتیجه گیری
بالا بودن مصرف CPU و RAM همیشه به معنی ضعیف بودن سرور نیست.
گاهی یک سرویس اضافه، افزونه سنگین، کوئری دیتابیس، Cron Job یا حتی یک پردازش غیرعادی میتونه باعث مصرف بیش از حد منابع بشه.
برای کاهش مصرف منابع سرور بهتره اول وضعیت سرور رو بررسی کنید و ببینید دقیقا چه چیزی CPU و RAM رو درگیر کرده.
بعد از اون میتونید سرویسهای غیرضروری رو حذف کنید، پردازشها رو مدیریت کنید، دیتابیس و برنامهها رو بهینه کنید و از Cache استفاده کنید.
اگر بعد از انجام این کارها همچنان منابع سرور کافی نبود، اون موقع ارتقای CPU یا RAM میتونه انتخاب مناسبی باشه. مهم اینه که قبل از افزایش هزینه، دلیل مصرف بالا رو پیدا کنید.
اگر این مطلب برایتان مفید بود، پیشنهاد میکنیم به مقاله ۱۰ ابزار ضروری برای مدیریت و مانیتورینگ سرورها نیز در بلاگ ما سر بزنید، با سپاس از همراهی شما.
سوالات متداول
چرا مصرف CPU سرور ناگهان بالا میره؟
دلایل مختلفی میتونه داشته باشه؛ از افزایش ترافیک و اجرای پردازشهای سنگین گرفته تا Cron Job، کوئری دیتابیس، حملات رباتی یا یک برنامه مشکلدار.
بهتره اول پردازشهای پرمصرف رو بررسی کنید.
چطور بفهمیم کدام برنامه RAM زیادی مصرف میکنه؟
در لینوکس میتونید از ابزارهایی مثل top و htop استفاده کنید.
در ویندوز سرور هم Task Manager و Resource Monitor اطلاعات خوبی درباره مصرف RAM هر پردازش در اختیارتون قرار میدن.
آیا افزایش RAM باعث کاهش مصرف CPU میشه؟
در بعضی شرایط بله، اما نه همیشه. اگر کمبود RAM باعث استفاده زیاد از Swap شده باشه، افزایش RAM میتونه عملکرد سرور رو بهتر کنه.
اما اگر یک برنامه مشکلدار CPU زیادی مصرف کنه، اضافه کردن RAM مشکل اصلی رو حل نمیکنه.
آیا Cache واقعا مصرف CPU سرور را کاهش میده؟
بله، در بسیاری از موارد. Cache باعث میشه بعضی درخواستها بدون اجرای دوباره پردازشهای سنگین پاسخ داده بشن و در نتیجه فشار روی CPU و دیتابیس کمتر بشه.
چه زمانی باید منابع سرور را ارتقا دهیم؟
اگر بعد از بررسی و بهینهسازی سرویسها، برنامهها، دیتابیس و پردازشها همچنان CPU یا RAM به صورت مداوم در محدوده بالا قرار داشته باشه، احتمالا منابع فعلی برای
حجم کاری سرور کافی نیست و بهتره سراغ ارتقای منابع برید.

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