פיירפוקס לא משחרר זכרון... ? 

איך משהו עובד? למה זה ככה?
שלח תגובה
geblig פותח השרשור
חבר ותיק
חבר ותיק
תגובות: 1727
הצטרף: אוקטובר 2008
מיקום: חיפה
נתן תודות: 43 פעמים
קיבל תודות: 40 פעמים

שליחה #1 

בוקר טוב,

למה הפיירפוקס שלי על ~420 מגה זכרון כאשר הטאב היחיד הפתוח הוא גוגול... 8O .. ?

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

ZiggyMan
סמל אישי של משתמש
חבר ותיק
חבר ותיק
תגובות: 2833
הצטרף: יוני 2007
נתן תודות: 77 פעמים
קיבל תודות: 277 פעמים

שליחה #2 

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

geblig פותח השרשור
חבר ותיק
חבר ותיק
תגובות: 1727
הצטרף: אוקטובר 2008
מיקום: חיפה
נתן תודות: 43 פעמים
קיבל תודות: 40 פעמים

שליחה #3 

האמת שרק התקנתי אותו
אני לא חושב שיש איזשהוא תוסף.

oferlaor
סמל אישי של משתמש
מנהל
מנהל
תגובות: 78895
הצטרף: נובמבר 2004
שם מלא: עפר לאור
מיקום: מודיעין, ישראל
נתן תודות: 789 פעמים
קיבל תודות: 5397 פעמים

שליחה #4 

וואי, איזה הגזמה.

אין כזה דבר שאין PLUGIN, יתכן שזה אפילו פלאש.

בכלל נושא דליפות הזיכרון של דפדפנים זו המכה של התחום.

הדפדפן שפתוח לי כרגע (גם FF) זולל 220MB של זיכרון עם איזה 5 טאבים פתוחים.

שבלול
סמל אישי של משתמש
חבר ותיק
חבר ותיק
תגובות: 1446
הצטרף: יולי 2005
נתן תודות: 27 פעמים
קיבל תודות: 65 פעמים

שליחה #5 

יש נטיה לקרוא לזה "דליפות זכרון" אבל זה לא רק דליפות זכרון וזה לא רק אשמת הדפדפנים וזה לא אופייני לדפדפנים בלבד (וזה לא שאני טוען שאין דליפות זכרון בפיירפוקס, ממש לא, אני רק רוצה לחדד משהו).
זה אופייני לכל process שמקצה ומשחרר הרבה זכרון,רואים את זה בעיקר בדפדפנים כי אנשים לא סוגרים אותם ומשאירים אותם פתוחים לאורך המון זמן. זה נובע בין השאר מבעיות מדפרגמנטציה של הזכרון ואפשר לראות את זה בהרבה מאוד תוכנות אחרות שמשתמשים בהם הרבה ומתנהגות באופן דומה... למשל סביבות פיתוח שגם נוטות להתנפח מאוד בזכרון עם הזמן.
הסבר נעים על העניין אפשר למצוא בקומקיקס שבזמנו גוגל פרסמו בחלק שבו הם מסבירים את אחת הסיבות שבגללן הם בחרו לעשות כרום Multi-Process ..
זה מתחיל בסוף עמוד 7 ונמשך ל 8:
http://www.google.com/googlebooks/chrome/med_06.html

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

לסיכום: תעברו לכרום, תפסיקו להסתכל על הזכרון, תשנאו גם את המערכות הפעלה (כולן, אין הנחות) ולא רק את הדפדפן, תזכרו שגם אתרים אשמים במצב הזה (שימוש מוגזם ב AJAX) וכו'

oferlaor
סמל אישי של משתמש
מנהל
מנהל
תגובות: 78895
הצטרף: נובמבר 2004
שם מלא: עפר לאור
מיקום: מודיעין, ישראל
נתן תודות: 789 פעמים
קיבל תודות: 5397 פעמים

שליחה #6 

שבלול,

בשביל זה המציאו GARBAGE COLLECTION. אם אתה לא משחרר כאלה כמויות של זיכרון ,כשכל מה שפתוח זה גוגל, אז תסלח לי מאוד זו דליפת זיכרון.

זליגת זיכרון נוצרת כאשר הדפדפן שוכח אובייקטים פתוחים שכבר אין בהם צורך. כאשר מקצים את הזיכרון מ-WINDOWS, הוא לא יודע מה בשימוש ומה לא. אם FF משתמש בזיכרון פנימי אז אכן פרגמנטציה יכולה לקרות (אבל לא עם מספרים כאלה משוגעים!) ואם הוא מנהל את הזיכרון כך אז ה-GARBAGE COLLECTOR שלו שבור...

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

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

geblig פותח השרשור
חבר ותיק
חבר ותיק
תגובות: 1727
הצטרף: אוקטובר 2008
מיקום: חיפה
נתן תודות: 43 פעמים
קיבל תודות: 40 פעמים

שליחה #7 

אם כבר הוזכר כרום, אז:

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

zovirax
סמל אישי של משתמש
חבר במועדון ה-15K
חבר במועדון ה-15K
תגובות: 15945
הצטרף: פברואר 2006
שם מלא: zovirax
נתן תודות: 299 פעמים
קיבל תודות: 330 פעמים

שליחה #8 

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

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

שבלול
סמל אישי של משתמש
חבר ותיק
חבר ותיק
תגובות: 1446
הצטרף: יולי 2005
נתן תודות: 27 פעמים
קיבל תודות: 65 פעמים

שליחה #9 

oferlaor כתב:שבלול,
בשביל זה המציאו GARBAGE COLLECTION. אם אתה לא משחרר כאלה כמויות של זיכרון ,כשכל מה שפתוח זה גוגל, אז תסלח לי מאוד זו דליפת זיכרון.

GC למינהם פותחו בעיקר כדי לחסוך למתכנתים עבודה ולהוריד את כמות הטעויות האפשריות שמתכנתים יכולים לעשות, לא כדי לצמצם את כמות הזכרון שתוכנה צורכת שהרי כל תוכנה שמשתמשת בGC תעשה שימוש ביותר זכרון ולא בפחות. GC יכול לעזור מאוד בהתמודדות עם בעיות דפרגמנטציה אבל בסופו של דבר זו רק עוד שכבה של ניהול זכרון שתסבול מאותם הבעיות שתוכנות אחרות על אותה מערכת ההפעלה סובלות. אם אתה מתעקש להכנס לויכוח על מה נחשב דליפת ומה לא אז דווקא אתה זה שלא מתאמץ לדייק, זה שהזכרון לא פונה לא אומר שזו דליפה ואם ננסה להגדיר בצורה מדוייקת מה היא דליפת זכרון אז מספיק הצצה בפסקה הראשונה בוויקיפדיה על הערך:
[left] A memory leak or leakage in computer science is a particular type of memory consumption by a computer program where the program is unable to release memory it has acquired. A memory leak has symptoms similar to a number of other problems (see below) and generally can only be diagnosed by a programmer with access to the program source code; however, many people refer to any unwanted increase in memory usage as a memory leak, though this is not strictly accurate. [/left]

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

זליגת זיכרון נוצרת כאשר הדפדפן שוכח אובייקטים פתוחים שכבר אין בהם צורך. כאשר מקצים את הזיכרון מ-WINDOWS, הוא לא יודע מה בשימוש ומה לא. אם FF משתמש בזיכרון פנימי אז אכן פרגמנטציה יכולה לקרות (אבל לא עם מספרים כאלה משוגעים!) ואם הוא מנהל את הזיכרון כך אז ה-GARBAGE COLLECTOR שלו שבור...


שוב, "שוכח" היא לא המילה המתאימה, יותר מתאים "לא מפנה בזמן שאתה היית רוצה שיפנה", למצוא מצבים של "שוכח" מוצאים מהר מאוד עם כלים כמו BoundsChecker ו Purify ונספחיהם.
אתה מאוד מקל ראש ומזלזל בבעיות הדפרגמנטציה של דפדפנים, אבל עובדה שגוגל מדברים על זה ואינספור מתכנתים של פיירפוקס מנסים לנתח ולהתמודד עם הבעיות האלה, אתה יכול לקרוא על זה איך המתכנתים של פיירפוקס התמודדו עם דפרגמנטציה במהלך הכתיבה של פיירפוקס 3 ובתוך הכתבה יש גם לינק נחמד עם תצוגה גרפית של הפרגמנציה של הזכרון במהלך נסיונות שונים שהם עשו:
http://blog.pavlov.net/2008/03/11/firef ... ory-usage/
לגבי אמירות לא נעימות על ה GC שלו, בסך הכל הוא יחסית חדש – אבל עדיין הוא עושה עבודה יותר טובה מאקספלורר אם אתה שואל אותי. אבל בטח אפשר לחפש נתונים ברשת להשוות.


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

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

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

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

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

...
zovirax כתב: אבל... יש לכרום גם דליפת זיכרון!!
השארתי את הכרום פתוח על אתר סרטים , חזרתי אחרי חצי יום שלא הייתי ליד המחשב, והמחשב לא זז.
פתחתי את ה TASK MANAGER והכרום לבד לקח לי 750 מגה שזה הרבה
...
סגרת את הטאב של סרטים לפני שהאשמת את כרום ? הסתכלתי על האתר סרטים והקוד שלו מלא בזבל, למעשה אם תלחץ Ctrl-Shift-J תראה שהוא זורק לדפדפן לא מעט שגיאות, אם יש לך תופסים כמו AdBlock הוא גורם לבעיות גם איתו (זה לא אשמתו בלבד כמובן)
פעם הבאה תכנס מתוך כרום ל about:memory ותעיף מבט איפה הזכרון נמצא. בכל אופן אני מאמין שאחרי שסגרת את הטאב דברים הסתדרו לך וזה אחד היתורנות הגדולים של דפדפן Multi Process
בכל אופן ברור שגם כרום לא חף מפשעים בתחום ניהול הזכרון

Nunatak
עוסק בתחום
עוסק בתחום
תגובות: 3722
הצטרף: דצמבר 2005
שם מלא: nunatak
נתן תודות: 154 פעמים
קיבל תודות: 156 פעמים

שליחה #10 

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

oferlaor
סמל אישי של משתמש
מנהל
מנהל
תגובות: 78895
הצטרף: נובמבר 2004
שם מלא: עפר לאור
מיקום: מודיעין, ישראל
נתן תודות: 789 פעמים
קיבל תודות: 5397 פעמים

שליחה #11 

שבלול,

לחלוטין לא מסכים אתך. אם כל פתיחת טאב, דפדוף וסגירתו מחדש גורמת להוספת זיכרון - זה זליגת זכרון וזה נוצר או מתוך באג או מתוך חוסר אכפתיות של המפתחים (יש עוד סיבות שקשורות לפיתוח). אני מפתח תוכנה כ 25 שנה באופן מקצועי ופיתוחים כמו gc מונעים ממפתחים את הצורך לזכור ולטרוח לשחרר זיכרון. Reference counting ו׳ gc מאפשרים מודלי פיתוח שתוכניתנים פחות מנוסים יכולים לנצל ללא זליגת משאבים (ג׳אווה, ו .net יכולים כך להיות בשימוש גם עם תוכניתנים פחות מנוסים ללא צורך בכלים כמו bounds checker).

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

בגלל גישה כזו של תוכניתנים יש לנו פלאש שעם פרסומת אחת בדפדפן שבכלל לא visible תופס 100% CPU. נפלא.

לפי העיקרון הזה (שמתאים לימי dos) כדאי לי לתפוס תמיד 100% מהמעבד והזיכרון ושכל האפליקציות האחרות יסתדרו.

מקווה מאד שאתה לא מפתח אפליקציות כאלה.

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

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

שלח תגובה

חזור אל “שאלות בנושאים טכניים”