דילוג לתוכן
חיפוש באתר

וורדפרס

memory limit בוורדפרס: למה הזיכרון נגמר ואיך מתקנים נכון

מה אומרת השגיאה Allowed memory size exhausted, ההבדל בין memory_limit של PHP ל-WP_MEMORY_LIMIT, איך מעלים נכון ומתי צריך לחפש את האשם.

· 1 צפיות ·

שגיאת memory limit בוורדפרס — ההודעה "Allowed memory size of … bytes exhausted" — אומרת שתהליך PHP שהריץ את העמוד ניסה להשתמש ביותר זיכרון ממה שמותר לו, והופסק באמצע. התוצאה יכולה להיות עמוד ריק, הודעת "שגיאה קריטית", ייבוא שנעצר באמצע, או ממשק ניהול שלא נטען. הפתרון הנפוץ ברשת הוא "תעלו את המגבלה" — ולפעמים זה באמת הפתרון. אבל לעיתים קרובות המגבלה היא רק הסימפטום, והבעיה היא קוד שצורך זיכרון בלי סיבה. במאמר הזה: איך המגבלות עובדות, איך מעלים אותן נכון, ומתי צריך לחפש את האשם.

שתי מגבלות שונות: של PHP ושל וורדפרס

יש כאן שתי שכבות, ובלבול ביניהן הוא הסיבה שהרבה "תיקונים" לא עובדים:

  • memory_limit של PHP — התקרה של השרת. לפי התיעוד של PHP, ההגדרה קובעת את כמות הזיכרון המקסימלית שסקריפט רשאי להקצות, וברירת המחדל היא 128M. היא נועדה למנוע מסקריפט גרוע לאכול את כל הזיכרון של השרת.
  • WP_MEMORY_LIMIT של וורדפרס — לפי התיעוד של וורדפרס, וורדפרס מנסה להעלות את הזיכרון שמוקצה ל-PHP ל-40MB באתר רגיל ול-64MB ברשת אתרים (multisite), וההגדרה משפיעה רק על וורדפרס ולא על אפליקציות אחרות. יש גם WP_MAX_MEMORY_LIMIT, שמאפשרת להגדיר ערך אחר לממשק הניהול.

הנקודה החשובה: וורדפרס יכול לבקש עד התקרה של PHP, לא מעבר לה. אם השרת מגביל ל-128M, הגדרה של 512M ב-wp-config.php לא תעזור — הזיכרון פשוט לא יינתן.

איך מעלים את המגבלה

בוורדפרס

בקובץ wp-config.php, לפני השורה שאומרת להפסיק לערוך:

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

ב-PHP

זה תלוי באחסון. בשרת שבשליטתכם, בקובץ php.ini או בהגדרות ה-pool של PHP-FPM. באחסון משותף בדרך כלל דרך לוח הבקרה (בורר גרסת PHP והגדרותיה), ולפעמים בקובץ .user.ini בתיקיית האתר:

memory_limit = 256M

אחרי השינוי, בדקו שהוא נקלט: בוורדפרס, בעמוד "בריאות האתר" ← "מידע", בחלק של השרת, מופיעה מגבלת הזיכרון של PHP בפועל.

כמה זה מספיק? לאתר תדמית רגיל, 128M עד 256M מספיקים בהרבה. אם אתר רגיל צריך יותר מזה כדי להציג עמוד, זה כבר סימן לבעיה.

מתי העלאת המגבלה היא הפתרון הלא נכון

מגבלת זיכרון היא גם מנגנון הגנה. אם תהליך אחד צורך מאות מגה-בייט, ובשרת רצים במקביל עשרות תהליכים כאלה, השרת עצמו ייגמר מזיכרון — ואז במקום שגיאה בעמוד אחד, כל האתר קורס או מחזיר 502. לכן כשהשגיאה מופיעה, כדאי לשאול מה צורך את הזיכרון:

הסימפטום החשוד
השגיאה בכל עמוד, אחרי עדכון תוסף או תבנית שהשתנו
רק בייבוא, ייצוא או גיבוי פעולה שטוענת הכל לזיכרון בבת אחת — טבעי שתצטרך יותר
רק בעמוד ארכיון או חיפוש גדול שאילתה שמושכת אלפי פוסטים בלי עימוד
רק בהעלאת תמונה עיבוד תמונה ברזולוציה גבוהה מאוד
הולך ומחמיר עם הזמן מסד נתונים מנופח, למשל אפשרויות שנטענות אוטומטית בכל עמוד

השורה המלאה של השגיאה ביומן כוללת את נתיב הקובץ שבו הזיכרון נגמר — וזה הרמז הראשון. הפעילו יומן שגיאות כמו שהסברתי במאמר שגיאה קריטית בוורדפרס. שימו לב שהקובץ שבו הזיכרון "נגמר" הוא לא תמיד האשם — הוא רק המקום שבו הבקשה האחרונה לזיכרון נכשלה. כלי כמו Query Monitor מציג את צריכת הזיכרון של כל עמוד ועוזר לצמצם את החשודים. על אבחון אתר כבד כתבתי במאמר וורדפרס איטי, ועל ניקוי מסד הנתונים במאמר אופטימיזציה למסד נתונים בוורדפרס.

הקשר לאחסון

באחסון משותף, תקרת הזיכרון נקבעת לעיתים קרובות על ידי הספק ולא ניתנת לשינוי מעבר לגבול מסוים. אם האתר באמת צריך יותר — חנות גדולה, אינדקס עם אלפי עמודים, ייבוא תכוף — ייתכן שהגיע הזמן לאחסון אחר. על מה וורדפרס צריך מהשרת כתבתי במאמר אחסון וורדפרס.

שאלות נפוצות

הגדרתי -1 כדי לבטל את המגבלה. זה בסדר?

PHP מאפשר את זה, אבל באתר חי זה מסוכן: תהליך אחד שנכנס ללולאה יכול לצרוך את כל הזיכרון של השרת ולהפיל את כל מה שרץ עליו. עדיף ערך גבוה ומוגדר.

העליתי את המגבלה והשגיאה נשארה באותו מספר בתים

המספר בהודעה הוא המגבלה שהייתה בתוקף. אם הוא לא השתנה, השינוי שלכם לא נקלט — כנראה בגלל התקרה של PHP או קובץ הגדרות שלא נקרא. בדקו בעמוד בריאות האתר.

מאמרים קשורים: ERR_CONNECTION_REFUSED: למה השרת דוחה את החיבור ומה עושים.

שגיאת זיכרון חוזרת היא הזמנה לבדוק מה באמת רץ באתר — ולפעמים לחסוך לא רק בזיכרון אלא גם בזמן טעינה. את זה אני עושה במסגרת שיפור מהירות אתרים. אם האתר שלכם נתקע על memory limit, כתבו לי.

אהבתם את המאמר?

בואו נבנה יחד!

מתכננים אתר חדש, פורטל, חנות או מערכת ניהול תוכן? ספרו לי על הפרויקט, ואחזור אליכם בעצמי. אני מתחיל תמיד בהבנת הצרכים העסקיים והטכניים — ורק אז ממליץ על הפתרון הנכון.

חיפוש באתר