ข้อความ "Fatal error: Allowed memory size of XXXXX bytes exhausted" หรือ "WordPress Memory Limit Exceeded" คือสัญญาณว่า PHP กำลังพยายามใช้ RAM เกินกว่าที่ server อนุญาต ปัญหานี้พบบ่อยมากในเว็บ WordPress ที่ติดตั้ง plugin จำนวนมาก ใช้ theme หนัก หรือรัน WooCommerce ที่มีสินค้าและ query ซับซ้อน บทความนี้จะอธิบายสาเหตุ วิธีตรวจสอบค่าจริง และวิธีเพิ่ม PHP Memory Limit ทุกแนวทางอย่างละเอียด

PHP Memory Limit คืออะไร และทำไมถึงสำคัญ

PHP Memory Limit คือค่าสูงสุดของ RAM ที่ PHP process หนึ่งๆ สามารถใช้งานได้ต่อการ request แต่ละครั้ง ค่านี้ถูกกำหนดในระดับ server (php.ini), ระดับ web server (.htaccess), หรือระดับ application (wp-config.php) โดย PHP จะอ่านค่าตามลำดับความสำคัญจากสูงสุดไปต่ำสุด

เมื่อ WordPress รัน process ใดก็ตาม ไม่ว่าจะเป็นการโหลดหน้าเว็บ รัน cron job อัปโหลดรูปภาพ หรือทำ database query ขนาดใหญ่ PHP จะจองหน่วยความจำสำหรับการทำงานนั้นๆ ถ้า plugin หรือ theme ต้องการ RAM เกินค่า limit ที่ตั้งไว้ PHP จะหยุดทำงานและแสดง error ทันที ทำให้หน้าเว็บโหลดไม่ครบหรือขาว (White Screen of Death)

ค่า default ของ PHP memory_limit คือ 128M ซึ่งพอสำหรับเว็บเบาๆ แต่ WordPress ที่มี plugin ครบชุดและ WooCommerce มักต้องการ 256M–512M เป็นอย่างน้อย

ตรวจสอบค่า Memory Limit ที่ใช้งานจริง

ก่อนแก้ไขค่าใดๆ ควรตรวจสอบก่อนว่าปัจจุบัน PHP ใช้ค่า memory limit เท่าไรจริงๆ มีหลายวิธี:

วิธีที่ 1 — ดูจาก WordPress Admin

เข้า WordPress Admin แล้วไปที่ Tools > Site Health > Info > Server จะเห็นค่า "PHP Memory Limit" และ "WordPress Memory Limit" ที่ระบบใช้งานอยู่

วิธีที่ 2 — สร้างไฟล์ phpinfo()

สร้างไฟล์ info.php ที่ root ของเว็บ แล้วเข้าดูผ่าน browser:

<?php phpinfo(); ?>

ค้นหาคำว่า memory_limit ในผลลัพธ์จะเห็นทั้งค่า local (ค่าที่ใช้งานจริง) และ master (ค่า default ของ server) จากนั้นลบไฟล์นี้ทิ้งทันทีหลังตรวจสอบเสร็จเพื่อความปลอดภัย

วิธีที่ 3 — ตรวจสอบผ่าน DirectAdmin

บน DirectAdmin ไปที่ Advanced Features > PHP Configuration จะเห็นค่า memory_limit ปัจจุบัน และสามารถแก้ไขได้โดยตรงจากหน้านี้

3 วิธีหลักในการเพิ่ม PHP Memory Limit

มีสามระดับที่สามารถกำหนดค่า memory_limit ได้ ควรเลือกระดับที่เหมาะสมกับสิทธิ์ที่มีและผลที่ต้องการ

วิธีที่ 1 — แก้ไขใน wp-config.php (แนะนำที่สุด)

เปิดไฟล์ wp-config.php ที่ root ของ WordPress แล้วเพิ่มบรรทัดต่อไปนี้ก่อน /* That's all, stop editing! */:

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

WP_MEMORY_LIMIT กำหนด memory สำหรับ front-end ส่วน WP_MAX_MEMORY_LIMIT กำหนด memory สำหรับ wp-admin และ tasks ที่ต้องการ resource มากกว่า

วิธีที่ 2 — แก้ไขใน .htaccess

ถ้า hosting รองรับการตั้งค่า PHP ผ่าน .htaccess (ซึ่ง Apache mod_php รองรับ) ให้เพิ่มบรรทัดนี้ในไฟล์ .htaccess ที่ root ของ WordPress:

php_value memory_limit 256M

วิธีนี้มีผลในระดับ directory ทั้งหมด ไม่ใช่แค่ WordPress แต่ต้องระวังว่า hosting บางเจ้าไม่อนุญาตให้ override ค่า PHP ผ่าน .htaccess เพราะอาจใช้ PHP-FPM แทน mod_php

วิธีที่ 3 — แก้ไขใน php.ini

สร้างหรือแก้ไขไฟล์ php.ini ในโฟลเดอร์ root ของเว็บ:

memory_limit = 256M

หรือถ้า hosting ใช้ PHP-FPM ซึ่งพบบ่อยบน DirectAdmin สมัยใหม่ ให้แก้ไขผ่าน user php.ini ใน DirectAdmin แทน เพราะ .htaccess อาจไม่มีผลกับ PHP-FPM

ค่า Memory Limit ที่แนะนำตามขนาดเว็บ

ค่าที่เหมาะสมขึ้นอยู่กับความซับซ้อนของเว็บและ plugin ที่ใช้งาน ตารางต่อไปนี้ช่วยในการเลือกค่าเริ่มต้น:

ประเภทเว็บ WP_MEMORY_LIMIT WP_MAX_MEMORY_LIMIT หมายเหตุ
เว็บบล็อก / เว็บธุรกิจเล็ก 128M 256M plugin ไม่เกิน 10 ตัว
เว็บบล็อก / Corporate ทั่วไป 256M 512M plugin 10–30 ตัว, SEO plugin
WooCommerce + Page Builder 512M 512M Elementor, Divi, สินค้ามาก
WooCommerce ขนาดใหญ่ / Membership 512M–1G 1G สินค้า 1,000+ รายการ, subscription

หมายเหตุ: ค่าที่ตั้งใน wp-config.php จะมีผลก็ต่อเมื่อ server ตั้งค่าไว้สูงกว่าหรือเท่ากันด้วย ถ้า php.ini ของ server ตั้งไว้ที่ 128M คุณไม่สามารถขอ 256M ผ่าน wp-config.php ได้ เพราะ PHP จะปฏิเสธค่าที่เกิน server limit โดยอัตโนมัติ

วิธีตั้งค่าผ่าน DirectAdmin บน Hosting AsiaGB

สำหรับผู้ใช้ AsiaGB Hosting ที่ใช้ DirectAdmin สามารถเพิ่ม memory_limit ได้โดยตรงผ่าน Control Panel โดยไม่ต้องแก้ไฟล์ด้วยมือ

  1. Login เข้า DirectAdmin ที่ yourdomain.com:2222
  2. ไปที่เมนู Advanced Features > PHP Configuration
  3. ค้นหาค่า memory_limit แล้วเปลี่ยนเป็นค่าที่ต้องการ เช่น 256M
  4. กด Save การตั้งค่าจะมีผลทันทีโดยไม่ต้อง restart Apache

ถ้าไม่มีตัวเลือก PHP Configuration ใน menu ให้ลองสร้างไฟล์ php.ini ใน public_html ด้วยตัวเองผ่าน File Manager แล้วใส่ค่า:

memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M

ตรวจสอบว่าค่าใหม่มีผลแล้วหรือยัง

หลังจากแก้ไขแล้ว ให้ตรวจสอบว่าค่า memory_limit ใหม่มีผลจริงหรือไม่ก่อนจะปิดหน้าต่าง การตรวจสอบสามารถทำได้หลายวิธี:

ตรวจผ่าน WP-CLI (ถ้าเข้าถึง SSH ได้)

wp --info

ในผลลัพธ์จะมี "PHP binary memory limit" แสดงค่าจริงที่ PHP binary ใช้อยู่

ตรวจผ่าน PHP function

สร้าง file test ชั่วคราวแล้วดูค่า:

<?php echo ini_get('memory_limit'); ?>

ถ้าผลลัพธ์แสดงค่าที่คุณตั้งไว้ เช่น 256M แสดงว่าการแก้ไขสำเร็จ

ตรวจผ่าน WordPress Health Check

ไปที่ WordPress Admin > Tools > Site Health > Info จะแสดง PHP Memory Limit ที่ระบบกำลังใช้งาน ควรตรงกับค่าที่ตั้งไว้

สาเหตุที่แก้แล้วยังไม่หาย

บางครั้งแก้ไขค่า memory_limit แล้วแต่ error ยังปรากฏอยู่ สาเหตุที่พบบ่อยคือ:

เคล็ดลับสำคัญ: ถ้าเพิ่ม memory_limit ไปถึง 512M แล้วยัง error อยู่ ให้ตรวจสอบว่า plugin ตัวใดกิน memory มากผิดปกติด้วยการปิด plugin ทีละตัว (bisect method) เพราะ memory ที่สูงมากอาจเป็นสัญญาณของ memory leak ใน plugin ไม่ใช่แค่ limit ต่ำ การแก้ที่ต้นเหตุดีกว่าการขึ้นค่าไปเรื่อยๆ

แก้ Memory Limit เฉพาะหน้า wp-admin อย่างเดียว

บางครั้งปัญหา Memory Limit เกิดเฉพาะตอนใช้งาน wp-admin เช่น เวลาอัปโหลดรูป import content หรือรัน plugin ที่ต้องการ resource มาก แต่ front-end ปกติ ในกรณีนี้สามารถเพิ่ม memory เฉพาะ admin ได้ด้วย WP_MAX_MEMORY_LIMIT:

// เพิ่ม memory เฉพาะ admin panel
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
// front-end ใช้ค่าต่ำกว่าเพื่อประหยัด resource
define( 'WP_MEMORY_LIMIT', '256M' );

WordPress จะอ่านค่า WP_MAX_MEMORY_LIMIT โดยอัตโนมัติเมื่อ request มาจาก wp-admin และใช้ WP_MEMORY_LIMIT สำหรับ front-end ทำให้บริหาร resource ได้อย่างมีประสิทธิภาพมากขึ้น

คำถามที่พบบ่อย (FAQ)

ค่า memory_limit ที่เหมาะสมสำหรับ WordPress คือเท่าไร

WordPress แนะนำ memory_limit อย่างน้อย 256M สำหรับเว็บทั่วไป ถ้ามี plugin หนักหรือใช้ WooCommerce ควรตั้งที่ 512M และถ้าใช้ Visual Builder หรือ Elementor Pro ที่ต้องการ resource มาก ควรพิจารณา 512M–1G เพื่อให้ทำงานได้อย่างราบรื่น ไม่ควรตั้งสูงเกินไปโดยไม่จำเป็น เพราะกิน RAM เกินความต้องการจริง

แก้ wp-config.php แล้วยังขึ้น Memory Limit Exceeded อยู่ ทำอย่างไร

ปัญหานี้มักเกิดเพราะ hosting server มีค่า php.ini ที่ server ตั้งไว้ต่ำกว่าค่าที่กำหนดใน wp-config.php ทำให้ WordPress ไม่สามารถขอ memory เกิน server limit ได้ ให้ตรวจสอบค่าจริงด้วย phpinfo() หรือดูใน DirectAdmin แล้วแก้ที่ .htaccess หรือ php.ini user แทน ถ้าแก้ได้ไม่เกิน server limit ให้ติดต่อ hosting เพื่อขอเพิ่ม

WP_MEMORY_LIMIT กับ WP_MAX_MEMORY_LIMIT ต่างกันอย่างไร

WP_MEMORY_LIMIT คือ memory ที่ WordPress ใช้สำหรับ front-end ทั่วไป (ค่า default 40M) ส่วน WP_MAX_MEMORY_LIMIT คือ memory สูงสุดที่อนุญาตสำหรับ admin/dashboard และ wp-admin ซึ่ง default ที่ 256M ควรตั้ง WP_MEMORY_LIMIT อย่างน้อย 256M และ WP_MAX_MEMORY_LIMIT อย่างน้อย 512M เพื่อให้การทำงานใน admin panel เป็นไปอย่างราบรื่น

Memory Limit Exceeded ทำให้ SEO เสียหายไหม

ใช่ Memory Limit Exceeded ทำให้หน้าเว็บโหลดไม่ได้หรือแสดง White Screen of Death ซึ่ง Google จะพบ error เหล่านี้ตอน crawl ทำให้ score ด้าน Core Web Vitals ลดลง และถ้าหน้าสำคัญโหลดไม่ได้นานพอ อาจถูก de-index ได้ ควรแก้ปัญหานี้ทันทีที่พบ อย่าปล่อยทิ้งไว้

Hosting DirectAdmin ครบชุดของ AsiaGB

AsiaGB Hosting รองรับ DirectAdmin เต็มรูปแบบ PHP 8.3 MySQL เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจ Hosting