דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. NodeJS הזיכרון מתנפח

NodeJS הזיכרון מתנפח

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 5 כותבים 263 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי מנצפך
    #1

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

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

    עשיתי לאחרונה איזשהו עדכון ומאז הזיכרון של השרתים התחיל שוב לקפוץ.
    אבל לא ברור לי למה. זה לא קורה תמיד. הזיכרון של כל תהליך הוא בדר"כ באיזור 250 MB. ולפעמים יש לו קפיצות עד 700MB שהוא יכול להשתחרר מהם לבד. ולפעמים הוא עובר את ה 1 GB ונופל ע"י ה PM2.

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

    כי לא שיניתי הרבה, יש רק פונקציה אחת שהשתנתה. והיא פונקציה שרצה בשביל כל קליינט, אחת או פעמיים לדקה. נניח שעל כל שרת יש אפילו 300 קליינטים פעילים (משהו שלא נראה לי סביר. אלא אולי 150). הפונקציה מריצה כמה שאילתות ב DB, ועושה כמה לולאות. לא משהו חריג בכלל.

    עריכה: גם ה CPU יכול לעלות במקביל ל RAM.

    nigunN א 2 תגובות תגובה אחרונה
    0
    • nigunN מנותק
      nigunN מנותק
      nigun
      השיב למנצפך ב נערך לאחרונה על ידי
      #2

      @מנצפך אמר בNodeJS הזיכרון מתנפח:

      עד שהגיע לכמויות גבוהות, מעל 1 GB. וה PM2 עשה לו ריסטרט.

      בלי קשר לבעיה שלך, הריסטרט מוגדר בברירת מחדל בPM2? או הגדרה ידנית?

      מייל: nigun@duck.com

      תגובה 1 תגובה אחרונה
      -1
      • א מנותק
        א מנותק
        אהרן
        השיב למנצפך ב נערך לאחרונה על ידי
        #3

        @מנצפך אמר בNodeJS הזיכרון מתנפח:

        פונקציה מריצה כמה שאילתות ב DB, ועושה כמה לולאות. לא משהו חריג בכלל

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

        תגובה 1 תגובה אחרונה
        0
        • ח מנותק
          ח מנותק
          חוקר
          כתב ב נערך לאחרונה על ידי
          #4

          @אהרן אמר בNodeJS הזיכרון מתנפח:

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

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

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

          תגובה 1 תגובה אחרונה
          0
          • מנצפךמ מנותק
            מנצפךמ מנותק
            מנצפך
            כתב ב נערך לאחרונה על ידי
            #5

            @אהרן
            מה שמשגע אותי שזה לא קורה תמיד. הזיכרון לכל שרת הוא בדר"כ סביב 200-300 MB ולפעמים הוא מתנפח עד ל 600-700 ויורד חזרה, ולפעמים חוצה את ה 1 GB וקורס (ייתכן שהיה מצליח לבד לשחרר את הזיכרון, לולא ה PM2 היה מוריד אותו).

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

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

            השרת האחורי מטפל בעיקר בשאילתות הפחות חשובות.

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

            א תגובה 1 תגובה אחרונה
            2
            • א מנותק
              א מנותק
              אהרן
              השיב למנצפך ב נערך לאחרונה על ידי
              #6

              @מנצפך אמר בNodeJS הזיכרון מתנפח:

              שרת API עצמו מספק גם את הקבצים הסטטיים

              אולי אם תשלח אותם ע"י זרם עם הגבלה למנות קטנות, יעזור.

              מנצפךמ תגובה 1 תגובה אחרונה
              0
              • מנצפךמ מנותק
                מנצפךמ מנותק
                מנצפך
                השיב לאהרן ב נערך לאחרונה על ידי
                #7

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

                yossizY תגובה 1 תגובה אחרונה
                1
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  השיב למנצפך ב נערך לאחרונה על ידי
                  #8

                  @מנצפך האם ידעת שאפשר לדבג תהליך נוד על ידי כלי המפתחים של כרום? האם אתה מכיר את כרטיסיית memory בכלי המפתחים? יש שם כלים מאוד שימושיים. נראה לי שתוכל דרך שם למצוא מקור הנפיחה.

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  מנצפךמ תגובה 1 תגובה אחרונה
                  4
                  • מנצפךמ מנותק
                    מנצפךמ מנותק
                    מנצפך
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #9

                    @yossiz
                    זה מאוד טוב ויפה בסביבת פיתוח.
                    הבעיה היא בפרודקשן.

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

                    nigunN תגובה 1 תגובה אחרונה
                    3
                    • nigunN מנותק
                      nigunN מנותק
                      nigun
                      השיב למנצפך ב נערך לאחרונה על ידי
                      #10

                      @מנצפך
                      נתקלתי עכשיו בפוסט הזה
                      נראה שהוא מדבר על כלי שמיועד למקרים כאלו.

                      מייל: nigun@duck.com

                      תגובה 1 תגובה אחרונה
                      0

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום