مواد پر جائیں
کنفیگریشن

WordPress میں "Allowed Memory Size Exhausted" کو ٹھیک کریں

اگر آپ کی سائٹ پر Fatal error: Allowed memory size of 268435456 bytes exhausted نظر آ رہا ہے، تو یہ لائن wp-config.php میں / That's all, stop editing! / کے اوپر شامل کریں

شائع شدہ

اگر آپ کی سائٹ پر Fatal error: Allowed memory size of 268435456 bytes exhausted نظر آ رہا ہے، تو یہ لائن wp-config.php میں /* That's all, stop editing! */ کمنٹ کے اوپر شامل کریں: define( 'WP_MEMORY_LIMIT', '256M' );۔ اس سے زیادہ تر سائٹیں ایک منٹ سے بھی کم وقت میں دوبارہ آن لائن ہو جاتی ہیں۔ لیکن یہاں سے جانے سے پہلے اس صفحے کا باقی حصہ بھی پڑھ لیں، کیونکہ لِمِٹ بڑھانا ایک تشخیص ہے، علاج نہیں۔ اگر کریش کسی بڑے نمبر پر واپس آ جائے، تو اصل مسئلہ وہ کوڈ ہے جو بغیر کسی حد کے میموری استعمال کر رہا ہے، اور بڑی چھت اسے بس مزید ڈھیل دے دیتی ہے۔

اس ایرر کا اصل مطلب کیا ہے

PHP یہ ٹریک کرتا رہتا ہے کہ ہر ریکویسٹ نے کتنی میموری مختص کی ہے۔ جب کوئی ایک ریکویسٹ php.ini میں سیٹ کی گئی (یا WordPress سے اوور رائیڈ کی گئی) memory_limit سے آگے میموری مختص کرنے کی کوشش کرتی ہے، تو PHP فوراً اس ریکویسٹ کو فیٹل ایرر کے ساتھ ختم کر دیتا ہے اور وہ بائیٹ کاؤنٹ پرنٹ کر دیتا ہے جس پر وہ مرا۔ 268435456 bytes یعنی 256M ہے۔ 134217728 یعنی 128M ہے۔ 536870912 یعنی 512M ہے۔ “tried to allocate” کے بعد والا نمبر آپ کو آخری تنکے کا سائز بتاتا ہے، مسئلے کا سائز نہیں۔

WordPress اپنی حدیں PHP کے اوپر لگاتا ہے۔ WP_MEMORY_LIMIT (ڈیفالٹ 40M، یا اگر PHP کی لِمِٹ زیادہ ہو تو وہی) فرنٹ اینڈ کو کنٹرول کرتی ہے۔ WP_MAX_MEMORY_LIMIT (ڈیفالٹ 256M) ایڈمن سائیڈ کے کاموں کو کنٹرول کرتی ہے جیسے میڈیا لائبریری اور plugin اپڈیٹس، جنہیں جائز طور پر زیادہ کی ضرورت ہوتی ہے۔ WordPress ان کانسٹنٹس کی بنیاد پر لوڈ کے وقت ini_set('memory_limit', ...) کال کرتا ہے — لیکن صرف اسی صورت میں جب آپ کا ہوسٹ ini_set کی اجازت دے، اور صرف اس ہارڈ کیپ تک جو آپ کا ہوسٹ سیٹ کرتا ہے۔ یہی آخری بات وہ وجہ ہے کہ wp-config.php میں ترمیم کبھی کبھی بے اثر معلوم ہوتی ہے۔

اسے ترتیب سے ٹھیک کریں

1. wp-config.php میں WordPress کی لِمِٹ بڑھائیں۔ یہ سب سے پہلے آزمانے والی چیز ہے کیونکہ یہ ریورس ایبل ہے اور کسی اور چیز کو نہیں چھیڑتی۔

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

اگر آپ کو یقین نہیں کہ یہ لائنیں کہاں جائیں گی، یا آپ ساتھ ہی دیگر عام کانسٹنٹس بھی صحیح سیٹ کرنا چاہتے ہیں، تو ہمارا wp-config generator ایک صاف بلاک لکھ دیتا ہے جسے آپ پیسٹ کر سکتے ہیں۔ جگہ کا خیال رکھیں — “stop editing” لائن کے نیچے جو کچھ بھی ہو، اسے نظر انداز کر دیا جاتا ہے۔

2. اگر اس سے کچھ نہ ہو، تو آپ کا ہوسٹ PHP کو کیپ کر رہا ہے۔ PHP لیول پر memory_limit بڑھائیں۔ php.ini میں:

memory_limit = 256M

بہت سے شیئرڈ ہوسٹس پر آپ php.ini براہِ راست ایڈٹ نہیں کر سکتے۔ اس کے بجائے اپنی ویب روٹ میں .user.ini فائل آزمائیں، یا Apache/mod_php سیٹ اپ پر اسے .htaccess کے ذریعے سیٹ کریں:

php_value memory_limit 256M

نوٹ کریں کہ .htaccess میں php_value nginx یا PHP-FPM سیٹ اپ پر 500 ایرر دیتا ہے، کیونکہ یہ ایک Apache/mod_php ڈائریکٹِو ہے۔ اگر اسے شامل کرنے کے بعد آپ کو 500 ملے، تو یہی وجہ ہے — اسے ہٹا دیں اور .user.ini استعمال کریں۔

3. اس ویلیو کی تصدیق کریں جو حقیقتاً لائیو ہے۔ جو آپ نے ایڈٹ کیا اس پر بھروسہ نہ کریں؛ اس پر بھروسہ کریں جو PHP رپورٹ کرتا ہے۔ اپنی ویب روٹ میں ایک لائن والی فائل ڈالیں:

<?php echo ini_get('memory_limit');

اسے براؤزر میں لوڈ کریں، ویلیو پڑھیں، پھر فائل ڈیلیٹ کر دیں۔ اگر 256M سیٹ کرنے کے بعد بھی یہ 128M دکھائے، تو آپ کا ہوسٹ آپ کو اوور رائیڈ کر رہا ہے اور آپ کو اُن سے رابطہ کرنا ہوگا یا ان کے کنٹرول پینل سیٹنگ کا استعمال کرنا ہوگا۔

وہ حصہ جو زیادہ تر گائیڈز چھوڑ دیتی ہیں

لِمِٹ بڑھانا تشخیص ہے۔ نتیجہ کیسے پڑھنا ہے، یہ رہا۔

اگر آپ 256M سیٹ کریں اور سائٹ عام ٹریفک میں چلتی رہے، تو آپ کی چھت جائز طور پر بہت نیچی تھی — یہ بڑی میڈیا لائبریری، WooCommerce، یا پیج بلڈرز والی سائٹوں پر عام ہے۔ آپ کا کام ہو گیا۔

اگر آپ 256M سیٹ کریں اور یہ پھر کریش ہو جائے، پھر 512M اور یہ پھر کریش ہو جائے، تو اسے بڑھانا بند کر دیں۔ ایک عام WordPress ریکویسٹ کو 512M کی ضرورت نہیں ہوتی۔ جب میموری کا استعمال بغیر کسی چھت کے چڑھتا رہے، تو کوئی چیز لوپ کر رہی ہے یا جمع ہو رہی ہے: کوئی plugin پوری ڈیٹابیس ٹیبل کو ایک اَری میں لوڈ کر رہا ہے، کوئی add_action جو خود کو ری کرسِولی ٹرِگر کرتا ہے، کوئی امپورٹ رُوٹین جو ہر رَو کو ایک ساتھ میموری میں رکھے ہوئے ہے، یا دو plugins جو ایک ہی hook کے اندر لڑ رہے ہیں۔ لِمِٹ بڑھانا کسی بے حد لوپ کو ٹھیک نہیں کرتا — یہ بس کریش کو چند سیکنڈ آگے کھسکا دیتا ہے اور اسے دوبارہ پیدا کرنا مشکل بنا دیتا ہے۔

مجرم ڈھونڈنے کے لیے، تمام plugins ڈی ایکٹیویٹ کریں اور Twenty Twenty-Four جیسے ڈیفالٹ theme پر سوئچ کریں۔ اگر ایرر رک جائے، تو ایک ایک کر کے دوبارہ ایکٹیویٹ کریں جب تک وہ واپس نہ آ جائے۔ ڈیبگ لاگ آن کریں تاکہ پکڑ سکیں کہ یہ کہاں مرتا ہے:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

wp-content/debug.log میں فیٹل لائن اُس فائل اور لائن نمبر کا نام بتاتی ہے جس نے آخری چنک مختص کیا۔ یہ عموماً وہی لوپ ہوتا ہے، یا اس سے ایک فنکشن کال کے فاصلے پر۔

کیا نہیں کرنا چاہیے

WP_MEMORY_LIMIT کو -1 یا 1024M سیٹ کر کے بھول نہ جائیں۔ لامحدود میموری کسی لیک کو ٹھیک نہیں کرتی؛ یہ کسی بے قابو ریکویسٹ کو پورا سرور کھا جانے دیتی ہے، جو اسی باکس پر موجود ہر دوسری سائٹ کو گِرا سکتی ہے اور آپ کو اپنے ہوسٹ سے کال دلوا سکتی ہے۔ چھت ایک سیفٹی فیچر ہے۔ اسے رکھیں۔

ini_set('memory_limit', '512M') کو functions.php میں بطور بنیادی حل پیسٹ نہ کریں۔ یہ بعض ناکامیوں کے لیے بہت دیر سے چلتا ہے — اگر کریش WordPress کور لوڈ کے دوران، آپ کے theme کی functions.php چلنے سے پہلے ہو جائے، تو یہ لائن کبھی چلتی ہی نہیں۔ wp-config.php پہلے لوڈ ہوتا ہے اور یہی درست جگہ ہے۔

یہ مت فرض کر لیں کہ یہ ہوسٹنگ کا مسئلہ ہے اور اپنا پلان اپ گریڈ کر لیں۔ کبھی کبھی واقعی ہوسٹنگ ناکافی ہوتی ہے۔ اکثر بالکل وہی کریش بڑے پلان تک آپ کا پیچھا کرتا ہے کیونکہ سبب آپ کے plugins کے ساتھ ہی چلا آیا۔ پہلے لوپ کو مسترد کریں؛ یہ مفت ہے۔

max_execution_time کے ایرر کو ٹھیک کرنے کے لیے memory_limit نہ بڑھائیں۔ یہ مختلف حدیں ہیں جن کے مختلف پیغامات ہیں۔ میموری ختم ہونے پر لکھا آتا ہے “Allowed memory size … exhausted”۔ ٹائم آؤٹ پر لکھا آتا ہے “Maximum execution time … exceeded”۔ غلط والی بڑھانا ایک پوری دوپہر برباد کر دیتا ہے۔

اب بھی پھنسے ہوئے ہیں؟

اگر آپ نے تصدیق کر لی ہے کہ لائیو لِمِٹ واقعی 256M یا اس سے زیادہ ہے، تمام plugins بند کر کے اور ڈیفالٹ theme کے ساتھ ٹیسٹ کر لیا ہے، اور پھر بھی میموری ختم ہو جاتی ہے، تو آپ کے پاس ایک حقیقی لیک ہے جسے ڈیبگ لاگ میں پیچھا کرنا چاہیے، نہ کہ ایک چھت جسے بڑھانا چاہیے۔ فیٹل لائن پکڑیں، نوٹ کریں کہ یہ کس plugin کی ڈائریکٹری کی طرف اشارہ کرتی ہے، اور یہی آپ کی بگ رپورٹ ہے۔ پہلے wp-config generator کے ساتھ اپنے بنیادی wp-config.php کانسٹنٹس درست کر لیں تاکہ آپ کو معلوم ہو کہ حدیں وہیں سیٹ ہیں جہاں آپ سمجھتے ہیں — پھر جا کر لاگ پڑھیں۔