دسته‌بندی نشده

دلایل بالا رفتن مصرف CPU در سرور و هاست + آموزش کامل رفع مشکل (وردپرس و لینوکس)

مصرف بالای CPU سرور یکی از چالش‌های اصلی مدیران سایت‌ها است که باعث کندی شدید صفحات، افت رتبه سئو و نمایش خطاهای متعدد می‌شود. علت افزایش CPU در هاست معمولاً به ترافیک غیرعادی، کدهای غیربهینه یا تنظیمات نادرست سرور مربوط است. در این مقاله ابتدا دلایل بالا رفتن مصرف CPU هاست اشتراکی و سرور را بررسی می‌کنیم و سپس به آموزش کامل و قدم‌به‌قدم رفع مشکل CPU usage سرور در محیط وردپرس و لینوکس می‌پردازیم.

CPU در سرور چیست و چرا افزایش آن سایت را مختل می‌کند؟

پردازنده مرکزی یا همان CPU در سرور مسئولیت مستقیم اجرای دستورات، پردازش کدهای PHP و پاسخ به درخواست‌های دیتابیس را برعهده دارد. وقتی ظرفیت این قطعه پر می‌شود، سرور دیگر توانایی پاسخگویی به درخواست‌های جدید را ندارد و تمام بازدیدکنندگان را در صف انتظار نگه می‌دارد.

بالا رفتن CPU هاست اشتراکی مستقیماً باعث بروز خطای ۵۰۸ یا همان Resource Limit Is Reached می‌شود. این اتفاق سرعت بارگذاری صفحات را کاهش می‌دهد، شاخص‌های Core Web Vitals را تخریب می‌کند و در صورت تداوم باعث خروج کامل سایت از دسترس یا Downtime می‌شود. در واقع، وقتی پردازنده با حداکثر توان کار می‌کند، زمان پاسخ‌دهی اولیه سرور یا همان TTFB از چند میلی‌ثانیه به چند ثانیه افزایش می‌یابد. به همین دلیل، مرورگر کاربر با خطای عدم پاسخ‌دهی مواجه می‌شود و ربات‌های گوگل نیز امکان بررسی و ایندکس صفحات جدید را از دست می‌دهند.

مهم‌ترین دلایل افزایش مصرف CPU در هاست و سرور

مهم‌ترین دلایل افزایش مصرف CPU در هاست و سرور

مصرف بالای CPU سرور به‌طورکلی ریشه در سه عامل اصلی دارد که شامل:

  • ترافیک ناگهانی و غیرعادی
  • بهینه‌نبودن کدهای سایت
  • محدودیت‌های ساختاری سرور

است. شناخت دقیق این سه عامل به شما کمک می‌کند بدون اتلاف وقت و پرداخت هزینه‌های اضافی، مستقیم به‌سراغ منشاء اصلی علت افزایش CPU در هاست بروید و آن را برطرف کنید.

ترافیک غیرعادی، حملات و ربات‌های خزنده Bot Traffic

ترافیک ورودی به سایت همیشه توسط کاربران واقعی ایجاد نمی‌شود و در بیشتر موارد ربات‌های مخرب یا خزنده‌های جستجوگر علت اصلی فشار روی پردازنده هستند. در سال ۲۰۲۶ با گسترش سریع ابزارهای هوش مصنوعی، ربات‌های استخراج داده یا همان AI Scrapers بدون رعایت فواصل زمانی، هزاران صفحه را در چند ثانیه اسکن می‌کنند و بار پردازشی سنگینی به سرور وارد می‌سازند.

ازسوی‌دیگر، حملات لایه ۷ یا همان Request Spam یکی از رایج‌ترین انواع حملات اینترنتی به شمار می‌روند. در این حملات، مهاجمان هزاران درخواست همزمان به‌سمت صفحات سنگین سایت می‌فرستند و پردازنده را فلج می‌کنند. برای درک بهتر این موضوع، نحوه تاثیرگذاری این حملات و دلیل مصرف بالای CPU سرور را در موارد زیر خلاصه کرده‌ایم:

  • ارسال درخواست‌های متعدد به بخش جستجوی سایت یا برگه تسویه حساب که به‌هیچ‌وجه قابل کش‌شدن نیستند؛
  • درگیر کردن مداوم مفسر PHP و سرویس MySQL برای ساخت پاسخ‌های جدید به‌ازای هر درخواست؛
  • ایجاد نوسان شدید در میزان server load و پر شدن سریع صف پردازش سرور؛
  • اشغال تمام نخ‌های پردازشی سرور و جلوگیری از ورود کاربران واقعی به سایت.

نقش وردپرس در مصرف بالای CPU سرور افزونه‌ها، قالب و دیتابیس

نقش وردپرس در مصرف بالای CPU سرور افزونه‌ها، قالب و دیتابیس

وردپرس به دلیل ساختار ماژولار خود می‌تواند با نصب چند افزونه سنگین یا قالب غیراستاندارد، حجم زیادی از منابع پردازشی سرور را ببلعد. استفاده از یک هاست وردپرس کانفیگ‌شده می‌تواند بخشی از این بار پردازشی را کنترل کند؛ اما کدنویسی ضعیف افزونه‌ها همچنان منابع را بلعیده و سرور را کند می‌کند.

اگر از سیستم مدیریت محتوای وردپرس استفاده می‌کنید، سه بخش زیر بیشترین سهم را در استفاده زیاد CPU در سرور دارند:

  • افزونه‌های غیربهینه و سنگین:نصب افزونه‌های صفحه‌ساز قدیمی، افزونه‌های آمارگیر که تمام داده‌های بازدید را مستقیماً در دیتابیس ذخیره می‌کنند و افزونه‌های امنیتی با اسکن‌های مداوم و لحظه‌ای، پردازنده را به‌شدت درگیر می‌کنند. این ابزارها به‌جای کمک به سایت، روند کاهش مصرف CPU وردپرس را کاملاً معکوس می‌کنند.
  • پرس‌وجوهای سنگین در دیتابیس MySQL:انباشت داده‌های موقت یا همان Transients در جدول wp_options همراه با عدم وجود ایندکس مناسب در جداول دیتابیس باعث می‌شود پردازنده برای یافتن یک داده ساده، هزاران سطر را بررسی کند.
  • فعال بودن مداوم WordPress Heartbeat API:این قابلیت برای ذخیره خودکار نوشته‌ها و مدیریت نشست‌های کاربری طراحی شده است. اما اگر کنترل نشود، با هر برگه باز در پنل مدیریت، هر چند ثانیه یک درخواست AJAX به سرور می‌فرستد و توان پردازشی را مستهلک می‌کند.

اجرای Cron Job های پیاپی و بکاپ‌گیری غیراصولی

کارهای زمان‌بندی‌شده یا همان Cron Jobs اگر در فواصل زمانی نامناسب اجرا شوند، شوک پردازشی شدیدی به سرور وارد می‌کنند. وقتی چند افزونه به‌طور همزمان اقدام به ارسال ایمیل‌های انبوه، بروزرسانی قیمت‌ها یا بررسی موجودی انبار می‌کنند، پردازنده ناگهان به مرز ۱۰۰ درصد می‌رسد.

علاوه‌براین، انجام فرایند پشتیبان‌گیری در ساعات شلوغ روز، فشار روی سرور را چند برابر می‌کند. فشرده‌سازی فایل‌های سنگین همراه با پشتیبان‌گیری هم‌زمان از دیتابیس، منابع پردازشی هاست را کاملاً پر کرده و مشکل CPU usage سرور را به اوج می‌رساند.

محدودیت منابع در هاست اشتراکی Shared Hosting Limitations

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

گاهی اوقات هیچ مشکلی در ساختار یا کدهای سایت شما وجود ندارد، بلکه اختصاص منابع پردازشی در هاست شما بسیار محدود است و راهی جز خرید هاست پرقدرت برای پاسخگویی به حجم ترافیک و پردازش‌های سایت خود ندارید. در این شرایط با کوچک‌ترین رشد در ترافیک یا اجرای یک پردازش معمولی، بالا رفتن CPU هاست اشتراکی اتفاق می‌افتد و سایت از دسترس خارج می‌شود.

چگونه مصرف CPU را بررسی و پردازش‌های سنگین را شناسایی کنیم؟

چگونه مصرف CPU را بررسی و پردازش‌های سنگین را شناسایی کنیم؟

بررسی پردازش‌های فعال و تحلیل میزان مصرف منابع، اولین اقدام عملی برای پیدا کردن کدهای پرمصرف و آی‌پی‌های مشکوک و علت مصرف بالای CPU سرور است. شما باید دقیقاً متوجه شوید چه ابزار یا پردازشی توان سرور را اشغال کرده است.

اگر از هاست اشتراکی با پنل cPanel استفاده می‌کنید، نحوه شناسایی پردازش‌های سنگین سرور بسیار ساده است.

  • کافی است وارد بخش Resource Usage یا ابزار LVE Manager شوید تا نمودارهای لحظه‌ای CPU load و میزان حافظه رم مصرفی را ببینید.
  • همچنین ابزار AWStats در cPanel لیست دقیق آی‌پی‌های پرمصرف، ربات‌های خزنده و آدرس‌هایی که بیشترین میزان درخواست را ارسال کرده‌اند به شما نشان می‌دهد.

اما در سرورهای مجازی و اختصاصی لینوکس، خط فرمان ترمینال اطلاعات جامع‌تر و دقیق‌تری در اختیار شما قرار می‌دهد. ابزارهای جدول زیر به شما کمک می‌کنند تا وضعیت دقیق پردازش‌ها و علل لود بالای سرور را تحلیل کنید:

نام ابزارکاربرد اصلی در سرورنحوه اجرا در ترمینال
topنمایش لحظه‌ای تمام پردازش‌ها، میزان مصرف CPU و RAM همراه با شناسه PIDاجرای مستقیم دستور top
htopمحیط پیشرفته و رنگی ابزار top با امکان جستجو، فیلتر و مدیریت آسان پردازش‌هااجرای مستقیم دستور htop
pidstatبررسی دقیق میزان مصرف منابع به تفکیک هر پردازش در فواصل زمانی مشخصاجرای دستور pidstat -u 1

در این ابزارها ستون شناسه پردازش یا همان PID اهمیت فوق‌العاده‌ای دارد. به‌عنوان مثال، اگر یک پرس‌وجوی سنگین MySQL یا یک اسکریپت معیوب PHP ظرفیت پردازنده را قفل کرده باشد، می‌توانید با اجرای دستور kill -9 PID آن پردازش را فوراً متوقف کنید تا وضعیت سرور به حالت عادی بازگردد.

روش‌های کاهش مصرف CPU

روش‌های کاهش مصرف CPU

رفع مشکل مصرف بالای CPU سرور نیازمند بهینه‌سازی کدهای نرم‌افزاری، تنظیم دقیق سرور و مدیریت ترافیک ورودی است. با اجرای قدم‌به‌قدم راهکارهای زیر می‌توانید بار پردازنده را به حداقل برسانید.

متخصصان برجسته حوزه عملکرد وب و شبکه‌های توزیع محتوا در گزارش‌های فنی خود به نکته مفیدی اشاره می‌کنند:

“High CPU usage is rarely a hardware failure; it is almost always the result of inefficient code execution, unoptimized queries, or automated bot traffic overloading server threads.”

«مصرف بالای پردازنده به‌ندرت ناشی از نقص سخت‌افزاری است؛ این مشکل تقریباً همیشه از اجرای کدهای غیربهینه، پرس‌وجوهای سنگین دیتابیس یا هجوم ربات‌های خودکار سرچشمه می‌گیرد.»

ارتقا به نسخه PHP 8.2 یا بالاتر

ارتقای نسخه PHP سریع‌ترین و موثرترین روش برای افزایش performance سرور لینوکس است. نسخه‌های قدیمی مانند PHP 7.4 به دلیل ساختار قدیمی مفسر خود، برای اجرای کدهای مشابه به زمان پردازش و دستورات بیشتری نیاز دارند.

طبق بنچمارک‌های سال ۲۰۲۶، ارتقا از نسخه ۷.۴ به PHP 8.2 یا PHP 8.3 مصرف پردازنده را بین ۲۰ تا ۳۰ درصد کاهش می‌دهد. نسخه جدید PHP با بهره‌گیری از کامپایلر Just-In-Time کدهای برنامه را با سرعت بسیار بالاتری به زبان ماشین تبدیل می‌کند و فشار پردازشی روی سرور را به شدت کم می‌کند.

پیاده‌سازی سیستم کشینگ چندلایه

کشینگ مانع از اجرای تکراری کدهای PHP و پرس‌وجوهای دیتابیس می‌شود. برای رسیدن به بهترین نتیجه باید سیستم کش را در دو سطح اصلی فعال کنید:

  • صفحه کش یا Page Cache:افزونه‌هایی نظیر LiteSpeed Cache یا WP Rocket خروجی نهایی صفحات را به فایل‌های استاتیک HTML تبدیل می‌کنند. به این ترتیب با ورود کاربر جدید، فایل‌های آماده بدون درگیر شدن PHP و پردازنده به مرورگر فرستاده می‌شوند.
  • شیء کش یا Object Cache:سرویس‌هایی مانند Redis یا Memcached پاسخ پرس‌وجوهای دیتابیس را در حافظه رم ذخیره می‌کنند. این کار فشار مستقیم را از روی دیتابیس MySQL برمی‌دارد و مصرف CPU را کاهش می‌دهد.

مدیریت ربات‌ها و استفاده از دیواره آتش WAF

برای جلوگیری از overload شدن سرور توسط ربات‌های غیرضروری، حتماً سایت خود را به یک دیواره آتش مانند Cloudflare متصل کنید. با فعال کردن ویژگی Bot Fight Mode در Cloudflare، ربات‌های استخراج داده و درخواست‌های مشکوک پیش از رسیدن به سرور شناسایی و مسدود می‌شوند.

همچنین می‌توانید با قرار دادن کدهای زیر در فایل htaccess. دسترسی ربات‌های پرمصرف و ناشناخته را به‌صورت مستقیم مسدود کنید تا منابع پردازشی سرور هدر نرود:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTP_USER_USER_AGENT} (AhrefsBot|SemrushBot|MJ12bot) [NC]

RewriteRule .* - [F,L]

</IfModule>

کنترل Heartbeat API و مدیریت Cron Jobs

برای رفع مصرف بالای CPU در وردپرس، کنترل فرکانس درخواست‌های پس‌زمینه اهمیت زیادی دارد. با استفاده از افزونه‌های مدیریت Heartbeat می‌توانید فواصل ارسال درخواست‌های AJAX را در پنل مدیریت افزایش بدهید یا آن را محدود کنید.

همچنین توصیه می‌شود سیستم کرون جاب داخلی وردپرس را غیرفعال کرده و آن را به کرون جاب سرور منتقل کنید. برای این کار کد زیر را در فایل wp-config.php بگذارید:

define('DISABLE_WP_CRON', true);

 

سپس در بخش Cron Jobs سرور لینوکس یا پنل cPanel، دستور زیر را تنظیم کنید تا کارهای زمان‌بندی‌شده فقط هر ۳۰ دقیقه یک‌بار اجرا شوند:

wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

بهینه‌سازی دیتابیس و پاک‌سازی داده‌های زائد

دیتابیس‌های شلوغ و بهینه‌نشده اصلی‌ترین علت برای سوال چرا CPU سرور ۱۰۰ درصد می‌شود، هستند. جدول‌های دیتابیس به‌مرورزمان پر از پیش‌نویس‌های قدیمی، دیدگاه‌های اسپم و داده‌های موقت منقضی می‌شوند.

با استفاده از افزونه‌های بهینه‌سازی دیتابیس یا ابزار WP-CLI، جداول MySQL را پاک‌سازی و مرتب کنید. به‌ویژه پاک‌سازی داده‌های زائد در جدول wp_options سرعت پاسخ‌دهی دیتابیس را چندبرابر می‌کند و بار پردازنده را به‌شکل چشمگیری پایین می‌آورد.

سخن پایانی

کاهش مصرف پردازنده سرور نیازمند ترکیبی از بهینه‌سازی کدهای وردپرس، کنترل ترافیک ورودی و ارتقای زیرساخت است. با بروزرسانی نسخه PHP به ۸.۲، فعال‌سازی کش چندلایه و کنترل ربات‌ها با فایروال می‌توانید پایداری سایت خود را حفظ کنید. پایش مداوم منابع پردازشی مانع از افت سرعت و قطعی سایت می‌شود.

اگر با وجود تمام بهینه‌سازی‌ها همچنان با مشکل High CPU usage server مواجه هستید، زمان آن رسیده که منابع خود را ارتقا دهید. برای دریافت مشاوره و تهیه سرورهای بهینه‌شده، به صفحه خرید هاست پرقدرت مراجعه کنید.

نمایش بیشتر
دکمه بازگشت به بالا