بلاگ ابرینا

داستان خطای کمبود حافظه در وردپرس چیست؟

اگر در حین کار با سایت، نصب یک قالب جدید یا آپلود یک تصویر، ناگهان با یک صفحه سفید و خطای Fatal error: Allowed memory size of X bytes exhausted مواجه شدید، اصلاً نگران نباشید! این خطا صرفاً به این معناست که یکی از افزونه‌ها یا پردازش‌های سایت شما، بیشتر از سقف مجازِ حافظه رم (RAM) که سرور برای وردپرس تعیین کرده، درخواست حافظه کرده است. سریع‌ترین راهکار برای حل این مشکل، اضافه کردن قطعه کد define( 'WP_MEMORY_LIMIT', '256M' ); به فایل wp-config.php سایتتان است. در این آموزش جامع، قصد داریم دلایل پر شدن حافظه را بررسی کرده و ۴ روش قطعی و گام‌به‌گام برای رفع خطای memory exhaused error در وردپرس را با هم یاد بگیریم تا سایت شما دوباره با بالاترین سرعت در دسترس قرار گیرد.

رفع خطای memory exhaused error در وردپرس

نکته : اگر از هاست های ابرینا استفاده میکنید این خطا و مشکل را با پشتیبانان ما در میان بگذارید در سریعترین زمان ممکن مشکل شما را حل خواهیم کرد.

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

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /public_html/wp-includes/plugin.php on line 1000

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

اما این خطا دقیقاً چه می‌گوید؟ کدهای سایت شما (به زبان PHP) برای اجرا شدن روی سرور، نیاز به یک فضای کاری یا حافظه موقت (RAM) دارند. شرکت‌های هاستینگ و خود سیستم وردپرس، برای اینکه یک سایت به تنهایی کل رم سرور را نبلعد، یک مرز و لیمیت (Limit) مشخص برای حافظه تعیین می‌کنند (مثلاً ۶۴ یا ۱۲۸ مگابایت). حالا اگر شما یک افزونه پرمصرف نصب کنید که برای پردازش کارهایش به حافظه بیشتری نیاز داشته باشد، سرور جلوی آن را می‌گیرد و سایت شما قفل می‌شود.

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

برای انجام پیکربندی درست مقاله بهترین تنظیمات PHP Memory Limit و Max Execution Time برای افزایش کارایی سایت را بخوانید

چرا حافظه سایت پر می‌شود؟ (کالبدشکافی مشکل)

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

عامل پر شدن حافظه سایتاین عامل دقیقاً چه کاری انجام می‌دهد؟چقدر در بروز خطا تاثیر دارد؟
افزونه‌های صفحه‌ساز و سنگینافزونه‌هایی مثل المنتور، ویژوال کامپوزر یا ووکامرس برای لود کردن المان‌های خود نیاز به پردازش صدها فایل PHP به صورت همزمان دارند.بسیار بالا (اصلی‌ترین مقصر)
قالب‌های غیراستاندارد یا نال‌شدهکدهای کثیف و بهینه‌نشده در قالب‌ها، در یک حلقه بی‌نهایت (Loop) گیر می‌افتند و حافظه را تا قطره آخر مصرف می‌کنند.بالا
پردازش تصاویر حجیموقتی یک عکس ۱۰ مگابایتی آپلود می‌کنید، وردپرس سعی می‌کند آن را تغییر سایز دهد. این پردازش گرافیکی به‌شدت رم مصرف می‌کند.متوسط
لیمیت‌های پیش‌فرض پایینگاهی هیچ‌کس مقصر نیست! وردپرس به صورت پیش‌فرض حافظه را روی ۴۰ یا ۶۴ مگابایت قفل می‌کند که برای سایت‌های امروزی بسیار کم است.بسیار بالا

آموزش گام‌به‌گام رفع خطای memory exhaused error در وردپرس

حالا که دقیقاً می‌دانیم با چه چیزی طرف هستیم، وقت آن است که آستین‌ها را بالا بزنیم و لیمیت حافظه سایت را افزایش دهیم. ما ۴ روش مختلف برای انجام این کار داریم. از روش اول شروع کنید؛ اگر جواب نداد (که در ۹۰ درصد مواقع جواب می‌دهد)، به سراغ روش‌های بعدی بروید.

گام اول: افزایش حافظه از طریق فایل wp-config.php (راه‌حل طلایی)

نحوه ویرایش فایل wp-config

همان‌طور که می‌دانید، فایل wp-config.php قلب تپنده تنظیمات وردپرس است. اولین جایی که باید به آن مراجعه کنیم، همین فایل است. وردپرس به صورت پیش‌فرض حافظه بخش کاربری را روی ۴۰ مگابایت و بخش مدیریت را روی ۶۴ مگابایت تنظیم کرده است. ما باید این عدد را به ۲۵۶ یا ۵۱۲ مگابایت افزایش دهیم.

  1. وارد کنترل‌پنل هاست خود (سی‌پنل یا دایرکت‌ادمین) شوید.
  2. به بخش File Manager بروید و پوشه اصلی سایت یعنی public_html را باز کنید.
  3. فایل wp-config.php را پیدا کرده، روی آن راست‌کلیک کنید و گزینه Edit (ویرایش) را بزنید.
  4. در میان کدها، به دنبال خطی بگردید که نوشته است:/* That's all, stop editing! Happy publishing. */
  5. نکته بسیار مهم: دقیقاً در خطِ بالای این عبارت، کد زیر را کپی کرده و قرار دهید:

PHP

define( 'WP_MEMORY_LIMIT', '256M' );
  1. فایل را ذخیره کنید (Save Changes) و سایت خود را رفرش کنید. تبریک می‌گویم! به احتمال بسیار زیاد، سایت شما بدون مشکل باز خواهد شد. در اکثر مواقع، رفع خطای memory exhaused error در وردپرس با همین یک خط کد به‌سادگی انجام می‌شود.

یک نکته : اگر افزونه ووکامرس دارید یا فروشگاهتان بزرگ است، می‌توانید عدد 256M را در کد بالا به 512M تغییر دهید تا خیالتان از بابت سرعت پردازش‌ها کاملاً راحت شود.

گام دوم: ویرایش فایل php.ini (فرمان مستقیم به سرور)

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

  1. دوباره وارد public_html در هاست خود شوید.
  2. به دنبال فایلی به نام php.ini یا .user.ini بگردید. (اگر این فایل را نمی‌بینید، از قسمت Settings در بالای صفحه سی‌پنل، تیک گزینه Show Hidden Files را بزنید تا فایل‌های مخفی نمایش داده شوند. اگر باز هم نبود، یک فایل جدید با نام php.ini بسازید).
  3. فایل را ویرایش (Edit) کنید و کد زیر را داخل آن قرار دهید:

Ini, TOML

memory_limit = 256M
  1. تغییرات را ذخیره کنید. این کد مستقیماً به مفسر PHP می‌فهماند که حافظه اختصاص‌یافته به کدهای سایت شما باید ۲۵۶ مگابایت باشد و این یکی از قدرتمندترین روش‌ها برای رفع خطای memory exhaused error در وردپرس است.

گام سوم: استفاده از فایل قدرتمند .htaccess

گاهی اوقات سرویس‌دهنده هاست شما دسترسی به فایل php.ini را مسدود کرده است. در این شرایط، ما یک راه فرار عالی داریم و آن هم استفاده از فایل قدرتمند .htaccess است. این فایل وظیفه کنترل رفتار وب‌سرور (مثل آپاچی یا لایت‌اسپید) را بر عهده دارد.

  1. در مسیر public_html هاست خود، فایل .htaccess را پیدا کنید (این فایل معمولاً مخفی است، پس حتماً تیک نمایش فایل‌های مخفی را زده باشید).
  2. روی فایل کلیک راست کرده و Edit را بزنید.
  3. به انتهای کدهای موجود در فایل بروید (مراقب باشید کدهای قبلی را پاک نکنید) و کد زیر را اضافه کنید:

Apache

php_value memory_limit 256M
  1. فایل را ذخیره کرده و سایت را بررسی کنید. اگر با خطای ۵۰۰ (Internal Server Error) مواجه شدید، یعنی وب‌سرور شما از این دستور در این فایل پشتیبانی نمی‌کند. سریعاً وارد فایل شوید، کدی که اضافه کردید را پاک کنید تا سایت برگردد و روش بعدی را امتحان کنید.

گام چهارم: استفاده از ابزار جادویی MultiPHP INI Editor در سی‌پنل

ویرایش در MultiPHP INI Editor

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

  1. وارد داشبورد اصلی cPanel خود شوید.
  2. در بخش Software، به دنبال گزینه‌ای به نام MultiPHP INI Editor بگردید و روی آن کلیک کنید.
  3. در پنجره باز شده، از منوی کشویی بالا، نام دامنه سایت خود را انتخاب کنید.
  4. حالا لیستی از تنظیمات PHP به شما نمایش داده می‌شود. به پایین اسکرول کنید تا گزینه memory_limit را پیدا کنید.
  5. در کادر روبروی آن، عدد را به 256M یا 512M تغییر دهید.
  6. روی دکمه Apply در پایین صفحه کلیک کنید. تغییرات بلافاصله روی سرور اعمال شده و خطای سایت شما برطرف می‌شود.

وقتی افزایش حافظه جواب نمی‌دهد، مقصر کیست؟

فرض کنید تمام مراحل بالا را مو به مو انجام داده‌اید، عددها را تا 1024M (یک گیگابایت!) بالا برده‌اید، اما باز هم وقتی وارد سایت می‌شوید، خطای کلافه‌کننده Fatal Error سر جایش هست. در اینجا باید بدانید که مشکل دیگر از محدودیت‌های وردپرس نیست؛ بلکه یک کد مخرب یا یک افزونه معیوب در سایت شما وجود دارد که دچار نشتی حافظه (Memory Leak) شده است.

یعنی افزونه به صورت بی‌نهایت در حال مصرف رم است و شما هرچقدر هم حافظه را زیاد کنید، باز هم آن را می‌بلعد!

برای پیدا کردن این مجرم، باید مراحل زیر را طی کنیم:

تکنیک عیب‌یابی پلاگین‌ها (پیدا کردن افزونه مخرب)

از آنجایی که سایت شما خطای memory_exhausted می‌دهد، احتمالاً به پیشخوان وردپرس دسترسی ندارید. پس باید از طریق هاست اقدام کنیم:

  1. وارد File Manager هاست شوید و به مسیر wp-content بروید.
  2. پوشه plugins را پیدا کنید و نام آن را به plugins-old تغییر دهید. (با این کار، تمام افزونه‌های سایت شما در یک ثانیه خاموش می‌شوند).
  3. حالا سایت را رفرش کنید. اگر سایت بدون ارور باز شد، پس حدس ما درست بوده و یک افزونه مقصر اصلی است!
  4. نام پوشه را دوباره به plugins برگردانید.
  5. حالا وارد پیشخوان وردپرس شوید و افزونه‌ها را یکی‌یکی فعال کنید. بعد از فعال کردن هر افزونه، سایت را چک کنید. هر افزونه‌ای که سایت را دوباره سفید کرد، همان عامل اصلی پر شدن حافظه است. آن را پاک کرده و به دنبال یک جایگزین استاندارد بگردید. با این تکنیک، رفع خطای memory exhaused error در وردپرس به‌صورت ریشه‌ای انجام می‌شود.

نکته : اگر وارد پیشخوان وردپرس نمیتوانید شوید در همان پوشه plugins , پلاگین ها رو یکی به یکی تغییر نام دهید مثلا پلاگین elementor را به elementor_old تغییر دهید با این کار پلاگین غیر فعال میشود و سپس چک کنید که با غیرفعال کردن این پلاگین سایت مشکلش حل میشود یا خیر اگر پاسخ خیر هست به سراغ پلاگین بعدی بروید.

ارتقای هاست؛ پایان دائمی محدودیت‌ها

بیایید با هم کاملاً صادق باشیم. روش‌هایی که برای افزایش لیمیت در فایل‌های wp-config یا php.ini به کار بردیم، فقط زمانی کار می‌کنند که شرکت هاستینگِ شما از لحاظ سخت‌افزاری این مقدار رم را به اکانت شما اختصاص داده باشد.

در واقع، اگر شما یک هاست اشتراکی ارزان‌قیمت خریده باشید که کل رم اختصاص‌یافته به آن ۲۵۶ مگابایت است، حتی اگر در کدهای وردپرس عدد 1024M را وارد کنید، سرور به کدهای شما اهمیت نمی‌دهد و همان سقف فیزیکی خودش را اعمال می‌کند!

بنابراین، اگر سایت شما یک فروشگاه اینترنتی بزرگ است، قالب سنگینی دارد و بازدیدکنندگانتان زیاد هستند و همچنان با چالش رفع خطای memory exhaused error در وردپرس دست‌وپنجه نرم می‌کنید، کدهای سایت شما هیچ مشکلی ندارند؛ بلکه این زیرساخت شماست که کوچک است.

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

پرسش‌های متداول شما (FAQ)

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

آیا خطای کمبود حافظه به اطلاعات سایت و دیتابیس من آسیب می‌زند؟

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

من محدودیت حافظه را روی 1024M گذاشتم اما سایت کند شده است، چرا؟

بالا بردن بی‌رویه محدودیت حافظه، یک شمشیر دولبه است! اگر شما سقف حافظه را بسیار بالا ببرید، به کدهای مخرب یا افزونه‌های غیراستاندارد اجازه می‌دهید که رم سرور را تا مرز انفجار مصرف کنند. این کار باعث می‌شود منابع پردازنده (CPU) نیز درگیر شده و کل سایت به شدت کند شود. همیشه عدد حافظه را روی 256M یا نهایتاً 512M تنظیم کنید و به جای افزایش بی‌رویه عدد، بهینه‌سازی کدهای سایت را در اولویت قرار دهید.

تفاوت WP_MEMORY_LIMIT با WP_MAX_MEMORY_LIMIT چیست؟

در وردپرس، WP_MEMORY_LIMIT سقفی است که برای پردازش کدهای سمت کاربر (یعنی همان صفحاتی که مشتریان می‌بینند) تعیین می‌شود. اما WP_MAX_MEMORY_LIMIT سقف حافظه‌ای است که به بخش بک‌اند یا پیشخوان وردپرس (محیط ادمین) اختصاص داده می‌شود؛ زیرا معمولاً کارهای سنگین‌تری مثل آپلود عکس یا خروجی گرفتن از محصولات در بخش ادمین انجام می‌شود. شما می‌توانید هر دو مقدار را در فایل کانفیگ افزایش دهید.

کلام آخر

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

در این مقاله تلاش کردیم با زبانی ساده و کاربردی، صفر تا صد مسیر رفع خطای memory exhaused error در وردپرس را به شما آموزش دهیم. دیدیم که با اضافه کردن یک خط کد ساده به فایل wp-config.php یا تغییر تنظیمات از طریق ابزار MultiPHP در سی‌پنل، می‌توان این محدودیت را به‌راحتی کنار زد. همچنین یاد گرفتیم که اگر سایت باز هم مقاومت کرد، چگونه مچ افزونه‌های مخرب را بگیریم.

امیدواریم این آموزش به شما کمک کرده باشد تا سایت زیبایتان را سریعاً به مدار برگردانید و استرسِ قطعی سایت را پشت سر بگذارید. اگر هر کدام از مراحل بالا را انجام دادید و همچنان سوالی در ذهن داشتید، حتماً مشکل خود را در بخش نظرات همین مقاله بنویسید تا با هم آن را بررسی کنیم. موفق و پرانرژی باشید!