مرجع کامل محدودیت‌های منابع هاست؛ هر عدد چه چیزی را می‌شمارد؟

راهنمای عملی برای درک محدودیت منابع هاست اشتراکی: CPU، RAM، inode، IO و اجرای همزمان PHP. هر محدودیت با چه خطایی ظاهر می‌شود و کجای پنل باید ببینیدش.

۸ دقیقه به‌روزرسانی ۱۸ شهریور ۱۴۰۵

خطای 508 را گرفته‌اید و پشتیبانی می‌گوید «مصرف CPU شما بالاست»

سایت شما چند دقیقه پیش کار می‌کرد. حالا به جای صفحه اصلی، متن 508 Resource Limit Is Reached را می‌بینید. یا شاید خطای 503 Service Unavailable با پیام Error 503 Resource Limit Reached در مرورگر ظاهر شده. اولین سوالی که به ذهن می‌رسد این است: «مگر من چقدر منابع مصرف کرده‌ام که سایت کاملاً از کار افتاده؟»

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

محدودیت CPU در هاست اشتراکی؛ درصدی که ثانیه‌ای حساب می‌شود

محدودیت CPU در هاست اشتراکی معمولاً به صورت «درصد» یا «ثانیه‌ی CPU» تعریف می‌شود. یک هسته‌ی کامل یعنی ۱۰۰٪. اگر پلن شما ۵۰٪ CPU داشته باشد، یعنی در هر لحظه می‌توانید از نصف یک هسته استفاده کنید. اما نکته‌ای که اکثر کاربران نمی‌دانند این است: این درصد روی بازه‌های زمانی کوتاه (مثلاً ۶۰ تا ۳۰۰ ثانیه) میانگین گرفته می‌شود، نه به صورت لحظه‌ای.

یعنی اگر سایت شما برای ۱۰ ثانیه ۱۰۰٪ مصرف کند و بعد ۵۰ ثانیه تقریباً بیکار باشد، میانگین ۶۰ ثانیه‌ای شما حدود ۱۶٪ می‌شود و مشکلی ایجاد نمی‌کند. اما اگر یک اسکریپت خراب، مثلاً یک حلقه‌ی بی‌نهایت در وردپرس، برای ۵ دقیقه پیاپی CPU را بالا نگه دارد، محدودیت فعال می‌شود.

خطایی که می‌بینید: 508 Resource Limit Is Reached در مرورگر، یا در فایل error_log هاست پیامی شبیه CPU seconds limit exceeded. در cPanel، بخش Metrics → CPU and Concurrent Connections نمودار لحظه‌ای مصرف را نشان می‌دهد. در دایرکت‌ادمین هم بخش System Information → Resource Usage همین کار را می‌کند.

اینجا اشتباه می‌کنند: کاربر می‌بیند که «فقط یک ویزیت‌کننده» آنلاین بوده، پس چرا CPU بالا رفته؟ مشکل از تعداد بازدید نیست. مشکل از یک کرون‌جاب خراب است که هر ۵ دقیقه یک اسکریپت سنگین را اجرا می‌کند، یا یک افزونه‌ی وردپرس که در پس‌زمینه مدام درخواست HTTP به سرور خودش می‌فرستد. ویزیت‌کننده‌ی واقعی فقط یک نفر است؛ مصرف‌کننده‌ی واقعی یک فرآیند خودکار است که شما ساخته‌اید و یادتان رفته.

محدودیت RAM و «حافظه‌ی مجازی» چه فرقی دارد

محدودیت RAM در هاست اشتراکی معمولاً دو عدد است: حافظه‌ی فیزیکی (Physical Memory) و حافظه‌ی مجازی (Virtual Memory). حافظه‌ی مجازی شامل کد برنامه، کتابخانه‌های مشترک و حافظه‌ی اشتراکی است. یک فرآیند PHP که ۲۵۶ مگابایت حافظه‌ی فیزیکی مصرف می‌کند، ممکن است ۵۱۲ مگابایت حافظه‌ی مجازی داشته باشد.

خطای رایج این محدودیت در وردپرس، صفحه‌ی سفید مرگ است. در فایل error_log پیام Allowed memory size of 268435456 bytes exhausted را می‌بینید. این یعنی اسکریپت PHP از سقف memory_limit که در پنل تنظیم شده عبور کرده. توجه کنید: این مقدار را در فایل php.ini یا .htaccess می‌توانید تغییر دهید، اما اگر مصرف واقعی از سقف حساب کاربری (مثلاً ۱ گیگابایت RAM) عبور کند، خطای ۵۰۸ می‌گیرید و تغییر memory_limit دیگر کاری از پیش نمی‌برد.

محدودیت inode؛ پر شدن بی‌صدا و خطرناک دیسک

inode ساختاری در فایل‌سیستم است که متادیتای هر فایل یا پوشه را نگه می‌دارد. هر فایل، هر ایمیل، هر کش، هر جلسه (session) یک inode مصرف می‌کند. محدودیت inode یعنی «تعداد فایل‌هایی که می‌توانید داشته باشید»، نه حجمی که اشغال می‌کنید.

مثال واقعی: یک سایت وردپرسی با ۵۰ هزار فایل کش و ۲۰ هزار ایمیل قدیمی در صندوق پستی، شاید فقط ۲ گیگابایت فضا اشغال کرده باشد، اما ۷۰ هزار inode مصرف کرده. اگر سقف شما ۱۰۰ هزار باشد، نزدیک پر شدن هستید. وقتی inode تمام شود، اتفاق عجیبی می‌افتد: هنوز فضا دارید، اما نمی‌توانید هیچ فایل جدیدی بسازید. نه کش جدید، نه آپلود، نه حتی فایل سشن جدید برای ورود کاربران.

خطای این محدودیت معمولاً در پنل دیده می‌شود: Disk quota exceeded در حالی که مصرف دیسک شما ۴۰٪ است. در cPanel مسیر Files → File Manager را باز کنید و در بالای صفحه، نوار مصرف فضا و inode را می‌بینید. در دایرکت‌ادمین هم File Manager → Quota همین اطلاعات را دارد.

اینجا اشتباه می‌کنند: کاربر به جای پاک کردن فایل‌های اضافی، یک تیکت پشتیبانی باز می‌کند و می‌گوید «فضای من پر نشده، چرا آپلود نمی‌کنم؟». پاسخ این است که مشکل از تعداد فایل‌هاست، نه حجم. مقصرهای اصلی معمولاً این‌ها هستند: پوشه‌ی tmp که پر از فایل‌های موقت است، صندوق ایمیل که سال‌ها پاک نشده، و کش‌های قدیمی افزونه‌ها.

محدودیت اجرای همزمان PHP؛ قربانیِ ترافیکِ همسایه

این محدودیت تعداد فرآیندهای PHP است که حساب شما می‌تواند همزمان اجرا کند. عدد معمول بین ۱۰ تا ۵۰ است. هر درخواست HTTP که به یک اسکریپت PHP برسد، یک فرآیند مصرف می‌کند. اگر سایت شما از یک API خارجی داده بگیرد و آن API کند باشد، هر درخواست کاربر برای چند ثانیه یک فرآیند را در حالت انتظار نگه می‌دارد.

خطای این محدودیت در مرورگر کاربر به شکل 503 Service Unavailable ظاهر می‌شود. در لاگ هاست، پیام Resource limit reached: too many PHP processes را می‌بینید. نکته‌ی مهم: این خطا الزاماً به این معنی نیست که سایت شما شلوغ است. یک حمله‌ی ساده‌ی HTTP Flood با ۲۰ درخواست همزمان می‌تواند تمام اسلات‌های PHP شما را پر کند، حتی اگر سایت شما واقعاً ۵ بازدید در دقیقه داشته باشد.

راه تشخیص: در cPanel بخش Metrics → Errors را باز کنید و دنبال پیام‌های max_children یا server reached max_children بگردید. این پیام از سمت PHP-FPM می‌آید و یعنی همه‌ی فرآیندهای مجاز مشغول هستند.

محدودیت IO و ورودی/خروجی دیسک؛ کندی که شبیه مشکل شبکه است

IOPS (عملیات ورودی/خروجی در ثانیه) و سرعت خواندن/نوشتن دیسک، محدودیتی است که کمتر درباره‌اش صحبت می‌شود اما بیشتر از همه خودش را نشان می‌دهد. وقتی هاست شما روی یک دیسک NVMe مشترک با ۵۰ سایت دیگر است، سهم شما از IO دیسک محدود می‌شود.

نشانه‌ی این محدودیت: سایت شما «کند» است، نه «از کار افتاده». TTFB (زمان تا اولین بایت) بالا می‌رود، اما وقتی صفحه بالاخره لود می‌شود، همه‌چیز سریع است. وردپرس شما ۸ ثانیه طول می‌کشد تا لود شود، اما ابزارهای تست سرعت می‌گویند که اندازه‌ی صفحه کوچک است و مشکل از شبکه نیست. مشکل از این است که هر کوئری دیتابیس باید از دیسک خوانده شود و دیسک شلوغ است.

این محدودیت معمولاً خطای مشخصی ندارد. در عوض، در نمودار CPU and Concurrent Connections می‌بینید که مصرف CPU پایین است (مثلاً ۱۵٪) اما زمان پاسخ‌دهی بالاست. در این حالت، بهینه‌سازی کوئری‌های دیتابیس و فعال کردن کش‌های مناسب (مثل Redis یا Memcached) موثرترین کار است. راهنمای جامع بهینه‌سازی وردپرس روی هاست اشتراکی دقیقاً برای همین سناریو نوشته شده.

کجای پنل مدیریت، هر محدودیت را ببینیم؟

محدودیتcPanelDirectAdminخطای رایج
CPUMetrics → CPU and Concurrent ConnectionsSystem Information → Resource Usage508 Resource Limit Is Reached
RAMMetrics → CPU and Concurrent ConnectionsSystem Information → Resource Usageصفحه سفید + memory exhausted
inodeFile Manager → نوار بالاFile Manager → QuotaDisk quota exceeded با وجود فضای خالی
PHP ProcessesMetrics → ErrorsLogs → Error Log503 + max_children
IOبدون نمودار مستقیم؛ از روی کندی تشخیص دهیدبدون نمودار مستقیمTTFB بالا بدون خطای مشخص

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

محدودیت‌هایی که در پنل نمی‌بینید اما وجود دارند

بعضی محدودیت‌ها در هیچ نموداری نشان داده نمی‌شوند. تعداد اتصالات همزمان به MySQL، محدودیت نرخ ایمیل خروجی (معمولاً ۵۰۰ ایمیل در ساعت برای حساب‌های اشتراکی)، و حداکثر حجم هر فایل آپلودی (معمولاً ۲۵۶ مگابایت در PHP) از این دسته‌اند. این محدودیت‌ها در مستندات هر ارائه‌دهنده نوشته شده، اما در پنل جایی برای دیدن مصرف لحظه‌ای‌شان ندارید.

اینجا اشتباه می‌کنند: کاربر یک اسکریپت خبرخوان می‌نویسد که هر ۱۰ دقیقه به ۵۰ سایت خبری درخواست می‌دهد. بعد از یک ساعت، ایمیل‌های سایت دیگر ارسال نمی‌شوند. مشکل از محدودیت ایمیل است، نه از اسکریپت. سرویس‌هایی مثل Mailgun یا SendGrid برای ارسال انبوه ایمیل تراکنشی طراحی شده‌اند؛ هاست اشتراکی برای ارسال ایمیل خبرنامه‌ی ۱۰ هزار عضوی ساخته نشده.

پرسش‌های پرتکرار

خطای 508 Resource Limit Is Reached یعنی چه؟

یعنی حساب شما از سقف یکی از منابع تعیین‌شده عبور کرده است. این منبع می‌تواند CPU، RAM یا تعداد فرآیندهای همزمان باشد. خطای ۵۰۸ معمولاً موقتی است و بعد از ۶۰ تا ۳۰۰ ثانیه که میانگین مصرف پایین بیاید، سایت دوباره در دسترس می‌شود. اگر مدام تکرار می‌شود، باید منبع مصرف‌کننده را پیدا کنید، نه اینکه فقط منتظر بمانید.

محدودیت inode در هاست چقدر است و چطور آن را پاک کنم؟

سقف inode بسته به پلن هاستینگ معمولاً بین ۵۰ هزار تا ۵۰۰ هزار است. برای دیدن تعداد فعلی، در cPanel به File Manager بروید و نوار بالای صفحه را ببینید. برای پاک کردن، اول پوشه‌ی tmp را خالی کنید، بعد ایمیل‌های قدیمی را حذف کنید و در نهایت کش افزونه‌های وردپرس را پاک کنید. افزونه‌هایی مثل WP Rocket گزینه‌ی پاک کردن خودکار کش را دارند.

محدودیت حافظه PHP چقدر است و چطور زیادش کنم؟

مقدار پیش‌فرض memory_limit در هاست‌های اشتراکی معمولاً ۲۵۶ مگابایت است. برای تغییر آن، در cPanel بخش Select PHP Version → Switch to PHP Options را باز کنید و مقدار memory_limit را تغییر دهید. اگر این مقدار را به ۵۱۲ مگابایت برسانید اما باز هم خطای memory exhausted بگیرید، مشکل از سقف RAM حساب کاربری است و باید پلن را ارتقا دهید.

چرا سایت من بدون افزایش بازدید، خطای 503 می‌گیرد؟

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

آیا این مطلب برایتان مفید بود؟