0147 | PHP Fatal error: Out of memory

Fatal error: Out of memory (allocated 4194304) (tried to allocate 14156 bytes) in /var/www/html/script.php on line 123

เชื่อว่าคนทำเว็บที่ใช้ PHP หลายๆ คนคงเคยเจอปัญหานี้มาไม่มากก็น้อยกันอยู่ช่าม้า (แบ๊วซะ) หลายๆ คนเห็น error อันนี้แล้วก็ไปเข้าใจผิดว่า server แรมหมดอะไรงี้ด้วย เดี๋ยวจะมาอธิบายให้ครับ

  • Error นี้ไม่ได้เกี่ยวห่าอะไรเลยกับ RAM ของ server หมดครับ การ reboot เครื่องหรือ upgrade spec ของ VPS ของท่านไม่ได้ช่วยให้อาการนี้หายแต่อย่างใด
  • มันคือ Error ที่มาจากระบบจัดการการใช้ Memory ของ PHP เอง (ตั้งใน php.ini ชื่อ option ว่า memory_limit)
  • มันกำลังบอกว่า เจ้าของ server ตั้งจำกัดการใช้งาน Memory ของ PHP ไว้ (allocated ***) bytes
  • และมันบอกว่า script ใช้จนเต็ม limit ไปแล้ว แต่จะขอใช้เพิ่มอีก (tried to allocate *** bytes)
  • พอใช้เกิน limit ของที่ตั้งไว้ใน php.ini PHP ก็เลยสั่งตัดการทำงาน พร้อมกับพ่น error นั่นออกมา

ความจริง option นี้มีประโยชน์มากสำหรับ shared hosting เพื่อป้องกันไม่ให้มี script ใดๆ สามารถใช้งานแรมจนหมดได้… (อาจจะเกิดจากเขียน code ผิด หรืออะไรก็แล้วแต่) แต่การตั้งค่านี้ต่ำไปก็มีผลกระทบกับ CMS ที่เขียนมาไม่ดี และมีการใช้ทรัพยากรหนักๆ ครับ (WordPress / Joomla เป็นต้น)

ค่า memory_limit ของ PHP เนี่ย เท่าที่ใช้งานมาไม่ควรตั้งต่ำกว่า 8M (8388608) ครับ และสำหรับการใช้งาน CMS อย่าง wordpress หรือ joomla ที่ call stack ไม่รู้จะยาวไปหาอะไร แนะนำให้ตั้งที่ไม่ต่ำกว่า 64M (67108864) ครับ

Tags: ,