cPanel و WHM

رفع خطای 508 resource limit is reached در cPanel

خطای 508 resource limit is reached در cPanel یعنی حساب شما از سهم منابع خود (پردازنده، حافظه، پردازه های هم زمان یا دیسک) بیشتر مصرف کرده و سرور موقتا درخواست ها را رد می کند. با ابزار Resource Usage علت را پیدا کنید، بعد ترافیک یا اسکریپت سنگین را کنترل کنید.

نوشته تیم فنی پیکوهاستبه روزرسانی: ۱۱ مهر ۱۴۰۵۸ دقیقه مطالعه

صفحه ای با عبارت 508 Resource Limit Is Reached یعنی سایت شما به سقف منابع حسابش رسیده و سرور تا کم شدن مصرف، درخواست های تازه را رد می کند. سریع ترین کار این است که در cPanel وارد Resource Usage شوید و ببینید کدام منبع به سقف خورده است. خطای 508 resource limit is reached معمولا از ترافیک ربات ها، یک افزونه یا اسکریپت سنگین، یا درخواست های هم زمان زیاد می آید و با کم کردن همین مصرف برطرف می شود.

خطای 508 چه معنی دارد

این خطا را معمولا هاست های CloudLinux می دهند. CloudLinux هر حساب را در یک محیط محدود به نام LVE می گذارد تا یک سایت پرمصرف سایت های دیگر روی همان سرور را کند نکند. وقتی مصرف حساب شما از سهمش بیشتر شود، درخواست ها با کد 508 رد می شوند و بازدیدکننده پیام Resource Limit Is Reached را می بیند.

نکته مهم این است که 508 خطای هاست است و نه خطای کد. پس تا مصرف را کم نکنید با دست بردن در htaccess یا نصب دوباره وردپرس چیزی عوض نمی شود. روی سروری که CloudLinux ندارد، مثل بیشتر VPS ها، این پیام به همین شکل ظاهر نمی شود و محدودیت منابع به شکل دیگری خودش را نشان می دهد.

کدام محدودیت پر شده است

شش سقف اصلی در LVE وجود دارد و هر کدام نشانه خودش را دارد:

سقفمعنیعلامت رایج
CPUدرصد استفاده از پردازندهکندی عمومی و 508 در ساعت شلوغ
Memory (PMEM)حافظه فیزیکی حسابقطع شدن اسکریپت ها و خطای حافظه
IOسرعت خواندن و نوشتن دیسککندی هنگام بکاپ یا آپلود
IOPSتعداد عملیات دیسک در ثانیهکندی با فایل های ریز و زیاد
EP (Entry Processes)تعداد درخواست های هم زمان ورودی508 با افزایش ناگهانی بازدید
NPROCتعداد کل پردازه های حسابشکست اجرای دستور یا cron

مقدار هر سقف را پلن هاستینگ تعیین می کند و عدد مشترکی برای همه وجود ندارد. بعضی هاستینگ ها دو سقف آخر را در پنل نشان نمی دهند. اگر نمی دانید پلن شما چه سقف هایی دارد، از پشتیبانی هاستینگ بپرسید.

ابزار Resource Usage در cPanel

در cPanel از بخش Metrics وارد Resource Usage شوید. این صفحه روی هاست های CloudLinux مصرف لحظه ای و تاریخچه هر سقف را نشان می دهد. ستون Faults یا Limit Reached تعداد دفعاتی است که حساب شما به سقف رسیده است. اگر این ابزار را در پنل نمی بینید، هاستینگ آن را فعال نکرده و باید از پشتیبانی درخواست کنید.

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

بررسی لاگ بازدید

در cPanel از Metrics وارد Raw Access شوید و لاگ دامنه را دانلود کنید. فایل را در سیستم خودتان باز کنید و پرتکرارترین آدرس IP ها و صفحه ها را بشمارید. اگر ترمینال لینوکس دارید:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -n 10
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -n 10

دستور اول ده IP پرتکرار و دستور دوم ده آدرس پرتکرار را نشان می دهد. اگر یک IP هزاران درخواست زده یا صفحه ای مثل xmlrpc.php و wp-login.php صدها بار صدا خورده، با حمله حدس رمز یا ربات روبه رو هستید. اگر ترافیک پراکنده و عادی است ولی هم زمان زیاد است، مشکل در سنگین بودن خود صفحه هاست.

علت های رایج و راه حل

ربات ها و حمله به صفحه ورود

ربات های جستجو، اسکرپر و حمله حدس رمز، همه از سهم منابع شما استفاده می کنند. از cPanel در بخش Security وارد IP Blocker شوید و IP هایی را که در لاگ بیش از حد درخواست داده اند ببندید. برای وردپرس، افزونه های امنیتی می توانند تعداد تلاش ورود را محدود کنند. اگر از Cloudflare یا سرویس مشابه استفاده می کنید، آن جا قانون محدودیت نرخ بسازید تا درخواست ها به سرور شما نرسند.

wp-cron و درخواست های پشت سر هم

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

define('DISABLE_WP_CRON', true);

بعد در cPanel از Advanced وارد Cron Jobs شوید و یک وظیفه هر ۱۵ دقیقه بسازید:

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

آدرس example.com را با دامنه خودتان عوض کنید. با این کار اجرای زمان بندی ها از بازدید جدا می شود و قفل نمی شود.

افزونه های سنگین و کوئری های کند

افزونه هایی که آمار لحظه ای می گیرند، فهرست مطالب مرتبط می سازند یا اسکن امنیتی کامل انجام می دهند، پردازنده را زیاد مصرف می کنند. افزونه ها را یکی یکی غیرفعال کنید و بعد از هر بار مصرف را در Resource Usage ببینید. اگر فروشگاه ووکامرس دارید، بهینه سازی سرعت ووکامرس توضیح می دهد کدام بخش ها (سبد خرید، AJAX، جستجو) بیشتر از همه فشار می آورند.

نبود کش

هر بازدید بدون کش یعنی اجرای کامل PHP و کوئری دیتابیس. با فعال کردن کش صفحه، همان صفحه آماده را بدون اجرای PHP تحویل می دهید و مصرف CPU و EP چند برابر کم می شود. روی هاست های LiteSpeed، افزونه LiteSpeed Cache این کار را در سطح سرور انجام می دهد. تفاوت این با Apache در مقایسه LiteSpeed و Apache آمده است.

قبل از تغییر هر فایل، از سایت و دیتابیس بکاپ بگیرید. بستن IP با IP Blocker هم اگر اشتباه انجام شود، ممکن است خود شما یا کاربران واقعی را قفل کند. IP خودتان را پیش از ذخیره دوباره بررسی کنید.

اسکریپت و ربات تلگرام

اگر روی همین حساب وبهوک ربات تلگرام دارید، هر پیام کاربر یک درخواست هم زمان است. پارامتر max_connections را در setWebhook کم کنید تا تعداد اتصال همزمان تلگرام از سقف EP بالاتر نرود. جزئیات در آموزش وبهوک ربات تلگرام هست.

تفاوت 508 با کندی معمولی سایت

همه کندی ها به منابع حساب ربط ندارند. اگر صفحه ها کند باز می شوند ولی پیام 508 نمی بینید و Faults در Resource Usage صفر است، مشکل معمولا از کوئری دیتابیس، تصاویر حجیم یا کندی سرور مقصد (مثل درگاه پرداخت یا API بیرونی) است. پیام 508 فقط وقتی دیده می شود که سقف واقعا پر شده باشد، پس اگر آن را ندیده اید، سراغ ابزار اندازه گیری سرعت و لاگ خطای PHP بروید و نه افزایش پلن.

بر عکس، گاهی سایت اصلا کند نیست ولی در ساعت هایی کوتاه 508 می دهد. این الگو یعنی افزایش ناگهانی درخواست هم زمان، مثلا انتشار یک خبرنامه، یک کمپین تبلیغاتی یا ربات خزنده. در این حالت میانگین مصرف پایین است و فقط اوج لحظه ای به سقف EP می خورد، پس باید کش را فعال کنید یا اوج را پخش کنید.

چک لیست ده دقیقه ای

این ترتیب را از بالا به پایین دنبال کنید، چون مراحل اول ارزان تر و کم خطرتر از مراحل آخر هستند.

  1. Resource Usage را باز کنید و ببینید کدام سقف Faults دارد.
  2. لاگ Raw Access را برای همان ساعت دانلود کنید و IP و آدرس پرتکرار را بشمارید.
  3. IP ربات یا مهاجم را در IP Blocker ببندید.
  4. افزونه کش را فعال یا تنظیم کنید و کش را خالی کنید.
  5. wp-cron را به cron واقعی منتقل کنید.
  6. افزونه های سنگین را موقتا غیرفعال کنید و تاثیرش را ببینید.
  7. فایل error_log را برای حلقه های خطای تکراری بخوانید. اسکریپتی که هر ثانیه خطا می دهد، منابع را بیهوده می سوزاند.

اگر روی VPS هستید

روی سرور مجازی cPanel بدون CloudLinux، سقف حساب ها را خود شما در WHM تعیین می کنید و خطای 508 به این شکل ظاهر نمی شود. در عوض وقتی RAM یا CPU سرور پر شود، پردازه ها توسط سیستم عامل قطع می شوند یا سایت کند می شود. با دستورهای top و free -h مصرف لحظه ای را ببینید و در WHM بخش Process Manager را بررسی کنید. اگر مدیر پنل هستید و سقف حساب ها را روی CloudLinux تعیین می کنید، مقدار را بر اساس مصرف واقعی تنظیم کنید و نه حدسی.

چطور مطمئن شویم حل شده است

  • بعد از اعمال تغییرها، یک روز کامل Resource Usage را دنبال کنید و ببینید Faults بالا می رود یا نه.
  • لاگ Raw Access را دوباره بشمارید تا IP های پرتکرار قبلی دیده نشوند.
  • اگر سایت در ساعت شلوغ هم بالا می ماند، مشکل رفع شده است.

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

اگر قبل از خطای 508 کد 500 یا پیام های دیگری دیده اید، آموزش رفع خطای 500 کمک می کند علت را از هم جدا کنید. توضیحات رسمی cPanel درباره ابزارهای منابع در docs.cpanel.net آمده است.