שיטות מומלצות לניהול זיכרון

בדף הזה מוסבר על ההגדרה Reserved Memory (זיכרון שמור) במופע Memcached, ומתי צריך להגדיל את הזיכרון השמור. בדף הזה מוסברות גם שיטות מומלצות אחרות שחשוב להכיר כדי לנהל ביעילות את הזיכרון של מופע Memcached.

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

אם השימוש בזיכרון גדל מעבר לזיכרון הכולל של מערכת Memorystore, מצב של חוסר זיכרון (OOM) עלול לגרום לניקוי מלא של נתוני המטמון, מה שעלול לשבש את הפעילות של האפליקציה והעסק.

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

מושגים שקשורים לניהול זיכרון

קיבולת המכונה

קיבולת המופע היא כמות הזיכרון שאתם מקצים ב-GiB, וזה מה שאתם משלמים עליו. זיכרון המטמון לא זהה לקיבולת המופע כי הוא לא קבוע. עם זאת, כשאתם יוצרים את מופע Memcached, קיבולת המופע שווה לזיכרון המטמון כברירת מחדל.

לדוגמה, אם בוחרים קיבולת של 5GiB למופע, כברירת מחדל למופע יש נפח של 5GiB לאחסון פריטים.

מגבלת זיכרון המטמון

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

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

תקורה של זיכרון

תקורת הזיכרון היא הזיכרון שמשמש את תהליכי Memcached. הוא לא כולל פריטים שמאוחסנים בזיכרון לצורך שמירה במטמון.

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

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

ללא הגדרה, הזיכרון של צומת ריק של Memorystore for Memcached נראה כמו בתרשים שבהמשך.

פלייסהולדר

כשהאפליקציה מוסיפה פריטים למטמון, Memcached צובר תקורה לתהליכים כמו מאגרי חיבורים וטבלת הגיבוב הפנימית:

פלייסהולדר

מכיוון שהגידול בתקורה לא מוגבל, חלק מהתקורה של עומסי עבודה מסוימים גדל מעבר למגבלה השמורה, כפי שמוצג בהמשך:

פלייסהולדר

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

פלייסהולדר

יכול להיות שתבחינו שהתקורה של הזיכרון גדלה מעבר למרחב הנוסף ש-Memorystore מקצה לתקורה כברירת מחדל (כפי שמצוין בערך גבוה של System Memory Utilization). במקרה כזה, צריך להגדיל את הפרמטר Reserved Memory כדי ליצור תקורה נוספת לעומס העבודה.

זיכרון שמור

זיכרון שמור הוא הגדרה של Memorystore שמאפשרת להגדיל את כמות המקום שזמין לשימוש על ידי תקורה של זיכרון.

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

במכונות שנוצרו אחרי 25 באוקטובר 2021, אחוז הזיכרון השמור שמוגדר כברירת מחדל הוא 10%. אפשר לבטל את הערך הזה על ידי עדכון ההגדרה באופן ידני במופע. הפחתה של הזיכרון השמור במופע יכולה להגדיל באופן משמעותי את הסבירות לתנאי OOM.

הדיאגרמה הבאה מציגה מכונה שיצרה מקום נוסף לתקורה של הזיכרון על ידי הגדלת הזיכרון השמור:

פלייסהולדר

אחרי שמטמון Memcached מגיע למגבלה המופחתת הזו, הוא מתחיל להוציא פריטים.

פלייסהולדר

אחרי שתתחילו להשתמש במופע, יכול להיות שתצטרכו להגדיל את הזיכרון השמור במופע כדי לתמוך בעומס העבודה המקסימלי, בהתאם למדד System Memory Utilization.

פרטים נוספים מופיעים במאמר בנושא ניהול השימוש בזיכרון המערכת.

ניצול הזיכרון של המערכת

זיכרון המערכת שווה לקיבולת המופע שהוקצה לכם בתוספת המקום הנוסף ש-Memorystore מוסיף לזיכרון התקורה.

ניצול זיכרון המערכת הוא מדד שמראה את אחוז הזיכרון הכולל בשימוש (פריטים מאוחסנים בתוספת תקורה של הזיכרון) בהשוואה לזיכרון המערכת. זהו מדד חשוב מאוד למעקב, כי הוא מראה עד כמה קרובה המערכת לניצול מלא של הזיכרון הזמין במופע. ככל שהמדד System Memory Utilization (ניצול זיכרון המערכת) מתקרב ל-100%, כך גדל הסיכוי שהמופע יחווה מצב OOM. כדי לוודא שלמופע יש מספיק זיכרון לתמיכה בעומס העבודה, חשוב שתמיד יהיה מספיק זיכרון מערכת זמין.

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

התראות על ניצול זיכרון המערכת

מומלץ להגדיר התראה שתשלח לכם אם מדד השימוש בזיכרון המערכת יעלה על 90%. אם השימוש בזיכרון המערכת גבוה, כדאי לעקוב מקרוב אחרי מדד השימוש בזיכרון המערכת. אם הוא גדל באופן משמעותי, כדאי לנקוט צעדים כדי לנהל את השימוש בזיכרון המערכת. חשוב לפעול כשניצול זיכרון המערכת מגיע לרמות גבוהות, כי כך יש לכם זמן לצמצם את הבעיה במקום להתמודד עם ניקוי מטמון שנגרם בגלל מצב OOM.

מדיניות בנושא פינוי

‫Memcached משתמש באלגוריתם LRU שעבר אופטימיזציה כדי להסיר פריטים אחרי שהם ממלאים את זיכרון המטמון. הוראות להשבתת הסרת פריטים מהמטמון מפורטות במאמר בנושא הגדרת מכונות Memcached.

מעקב אחרי פינויים מציג את מספר המפתחות ש-Memcached מסירה בגלל מגבלות גודל. פריטים שמוסרים בגלל שפג תוקף ה-TTL שלהם לא נכללים במדד הזה. אם אתם רואים מספר גדול של הוצאות מהזיכרון, הגדלת המכונה עשויה להגדיל את שיעור מציאות במטמון (cache hit).

אם לא מפעילים את התכונה 'הוצאת פריטים מהזיכרון', והמטמון מלא לגמרי, יכול להיות שהגדרת פריטים בשרת Memcached תיכשל.

יחס פגיעות במטמון

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

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

מעקב אחר השימוש בזיכרון של המופע

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

מדד כתובת מלאה של מדד
זיכרון מטמון memcache.googleapis.com/node/cache_memory
ניצול זיכרון המערכת memcache.googleapis.com/node/memory/utilization
יחס פגיעות במטמון memcache.googleapis.com/node/hit_ratio
פינויים memcache.googleapis.com/node/eviction_count

ניהול השימוש בזיכרון המערכת

אם יש לחשבון שלכם עומס על הזיכרון או שמופיעות שגיאות OOM, צריך לפעול לפי השלבים הבאים כדי לפתור את הבעיה:

  1. אימות של מצב OOM
  2. הגדלת הזיכרון השמור במופע.
  3. הגדלת הקיבולת של המכונה.
  4. הגדרת ערכי TTL במפתחות לא יציבים.
  5. מחיקה ידנית של מפתחות במכונה.
  6. אם אתם עדיין נתקלים בתנאי OOM, פנו לתמיכה של Google Cloud Platform.

אימות של מצב OOM

כשמופע מגיע למצב OOM, האות הראשון הוא הפעלה מחדש של המופע. כדי לראות אם הפעלה מחדש נגרמת על ידי מצב OOM, אפשר להציג את זמן הפעולה ואת ניצול זיכרון המערכת מדדים.

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

הגדלת הזיכרון השמור

הגדלת הזיכרון השמור יוצרת יותר מקום לתקורה של הזיכרון. הוא עושה זאת על ידי הקטנת מגבלת זיכרון המטמון של המופע. אם מדד ניצול זיכרון המערכת חורג מ-90%, צריך להגדיל את זיכרון המערכת שמוקצה ל-SQL Server.

הוראות לשינוי ההגדרה של הזיכרון השמור מפורטות במאמר הגדרת מופעי Memcached.

הגדלת הזיכרון השמור מקטינה את הזיכרון שזמין לאחסון פריטים, ולכן פריטים יסולקו מהמטמון מוקדם יותר. כתוצאה מכך, ייתכן ששיעור מציאות במטמון (cache hit) של המכונה יקטן. פריטים לא יסולקו מהמטמון אם השבתתם את האפשרות לסילוק פריטים.

הגדלת המופע

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

הגדרת ערכי TTL במפתחות זמניים

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

מחיקת מפתחות באופן ידני במופע

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