שרת בNode Js - זיכרון מתנפח
-
יש לי שרת ב- nodeJS.
פלטפורמה של sails.js
(epxress עם כל מיני תוספות).
מופעל ע"י pm2
הזיכרון שלו בשעות הפעילות עומד על כ- 200 MB.
בשעות הלילה על כ 150 MB.
לעיתים נדירות קורה שהזיכרון מתחיל להתנפח למימדים מבהילים.
עד 1 GB !! ושם ה pm2 מפיל את השרת.
השרת מופעל מחדש ומיד מתנפח שוב.
כמובן שהמשתמשים חווים איטיות גדולה בשרת.איך אני יכול להתמודד עם זה?
דבר ראשון, איך לעשות debug ב nodeJS בדגש על שרת מרוחק.
מה עוד ממליצים לעשות?
אציין שה sessions וה- sockets נשמרים ב redis.
אבל בסה"כ מדובר באיזור 300 חיבורים מקסימום. -
@מנצפך אמר בשרת בNode Js - זיכרון מתנפח:
איך אני יכול להתמודד עם זה?
דבר ראשון, איך לעשות debug ב nodeJS בדגש על שרת מרוחק.
מה עוד ממליצים לעשות?
אציין שה sessions וה- sockets נשמרים ב redis.
אבל בסה"כ מדובר באיזור 300 חיבורים מקסימום.תוסיף את הזה לראש הקוד.
require('heapdump');
שהשרת מתנפח אתה שולח הודעת USR2 לתהליך. דרך שורת הפקודה.
$ kill -USR2 <pid>
ואז נוצר לך קובץ DUMP בתקית CWD של התוכנה. ואתה יכול לפתוח את הקובץ הזה בכלי המפתחים של כרום. ולראות מה תופס זיכרון.
-
@מנצפך אמר בשרת בNode Js - זיכרון מתנפח:
אבל בטרמינל הוא נשאר בפנים.
?
אולי זה יעזור?
נ"ל שאם מאיזה סיבה שהוא, התהליך לא מטפל ב-signal אז התהליך נהרג ע"י מערכת ההפעלה. השורה
require('heapdump');
אמור לגרום לתהליך node לרשום handler שיטפל ב-SIGUSR2. -
@אהרן בסוף הבעיה היתה קשורה כנראה לסשנים.
מחקתי את כל הסשנים (היו שמורים ב redis) ומאז זה הסתדר.
לא יודע בדיוק מה היתה הבעיה.אבל אשמח לדעת איך לדבג.
אגב, מה שעשיתי זה הוספתי קוד לשרת שכשאני פונה לכתובת מסויימת הוא יותר לי קובץ dump. זה חלק מהספרייה heapdump.