PHP memory_limit ב-WordPress: כמה זה צריך להיות וכיצד מגדילים נכון

memory_limit נמוך מדי גורם לקריסות אקראיות. כך מגדילים אותו בכל סוג שרת ואיך מבחינים מה ריאלי.

PHP memory_limit הוא תקרת זיכרון שכל בקשת PHP יכולה להשתמש בה. ברגע שבקשה חוצה את הגבול - PHP זורק שגיאת fatal: Allowed memory size of N bytes exhausted. ב-WordPress, אתר עם רק תוסף יחיד צרכן 32-64MB. עם Elementor, WooCommerce, Backup או Image Optimization - 128-256MB הוא הסטנדרט. אתר עם 50 תוספים פעילים ובקשת admin כבדה (יבוא של 1000 פוסטים, גיבוי, regenerate thumbnails) דורש 512MB.

למה זה משנה

השפעה ישירה: כשהגבול נמוך מדי, פעולות באמצע נופלות. גיבוי שעוצר אחרי 70%, ייבוא XML שמסיים חצי, או עורך פוסט שלא נטען בכלל - אלו תסמינים של memory exhaustion. גם פעולות שעבדו בעבר יכולות להיכשל אחרי הוספת תוסף שמגדיל את הצריכה.

השפעה עקיפה: זה גם מהווה רשת ביטחון. אתר עם 256MB יכול להתמודד עם בקשה אחת חריגה (למשל REST endpoint שמחזיר 5000 פריטים). אתר עם 64MB יקרוס. ב-WooCommerce עם הרבה מוצרים, תהליך של export/import דורש לעיתים 1GB+. בלי הזיכרון הזה - אי אפשר לעדכן קטלוג גדול.

אבל - הגדלה אינסופית היא גם בעיה. memory_limit של 2GB בעת בקשה שדולפת זיכרון אומר שכל worker יחזיק 2GB; ב-10 workers זה 20GB RAM. השרת יכרע. הערך הנכון הוא הקטן ביותר שמספיק לפעולות הסבירות - לרוב 256MB.

איך לזהות

הגדרה נוכחית: ב-Tools > Site Health > Info > Server, מופיע PHP memory limit. אפשר גם להריץ ב-WP-CLI: wp config get WP_MEMORY_LIMIT ו-php -i | grep memory_limit.

שגיאות זיכרון: בדוק wp-content/debug.log - חפש Allowed memory size of. כל שורה כזו היא בקשה שנכשלה. בלוג השרת (לרוב /var/log/php_error.log או error_log ב-cPanel) ימצאו עוד.

סימן עקיף: עמוד אדמין שמעלה "500 Internal Server Error" באמצע פעולה - לעיתים זה memory limit. בדוק את הלוג.

איך לתקן

חשוב: יש שתי הגבלות שונות. WordPress מגדירה ב-wp-config.php, וPHP מגדיר ב-php.ini. ההגבלה החמורה יותר תמיד גוברת. WordPress לעולם לא יכולה לחרוג מהגבלת PHP, אז אם PHP הוא 64MB - WP_MEMORY_LIMIT של 256MB לא יעזור.

שלב 1: WordPress. ב-wp-config.php, לפני /* That's all */:

define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M'); // לאדמין בלבד

WP_MEMORY_LIMIT חל על frontend; WP_MAX_MEMORY_LIMIT חל על wp-admin (פעולות כבדות).

שלב 2: PHP. ב-cPanel: "Select PHP Version" או "MultiPHP INI Editor" > memory_limit = 256M. ב-Plesk: Domain > PHP Settings > memory_limit. ב-VPS עם גישת shell: ערוך /etc/php/8.2/fpm/php.ini:

memory_limit = 256M

הפעל מחדש PHP-FPM: systemctl restart php8.2-fpm.

אם אין גישה ל-php.ini, נסה .user.ini בשורש האתר:

memory_limit = 256M

חכה 5-10 דקות (cache של PHP-FPM) ובדוק שוב.

טעויות נפוצות

הטעות הראשונה: להגדיר WP_MEMORY_LIMIT ולחשוב שהבעיה נפתרה - אם PHP נמוך יותר, WP_MEMORY_LIMIT לא משנה. תמיד בדוק עם phpinfo() את הערך בפועל. הטעות השנייה: להעלות לזיכרון אינסופי (-1) כדי "לא לדאוג" - זה מסתיר דליפות זיכרון. תוסף שולל מנהל את עצמו, ויום אחד 100 בקשות מקבילות יחד צורכות 100GB ומפילים את השרת. הטעות השלישית: לשכוח שיש גם max_execution_time ו-max_input_vars - שלושת הערכים האלה לרוב נופלים יחד באתרים חורקים.

בדיקה לאחר תיקון

בדוק ב-Site Health > Server שהערך עודכן. הרץ את הפעולה שנכשלה (גיבוי, ייבוא וכו') וודא שהיא מסתיימת. ב-debug.log חפש שגיאות חדשות - אם אין, התיקון תפס. ב-cPanel "Resource Usage", בדוק שהזיכרון לא נוגע בגג של החשבון.

טיפ: אם 256MB לא מספיק, הסיבה לרוב היא תוסף עם memory leak ולא צורך אמיתי. הרץ Query Monitor או New Relic כדי לזהות איזה plugin צורך הכי הרבה. עדיף לתקן את הצרכן מאשר להעלות את התקרה ללא סוף.