שאלה למעלה - מה גודל הזיכרון הווירטואלי? ... לינוקס / אובונטו


אני רץ top כדי לפקח על ביצועי השרת שלי 2 של התהליכים שלי ג 'אווה להראות זיכרון וירטואלי של עד 800MB-1GB. האם זה דבר רע?

מה המשמעות של זיכרון וירטואלי?

ו אגב, יש לי החלפה של 1GB וזה מראה 0% בשימוש. אז אני מבולבל.

תהליך ג 'אווה = 1 שרת Tomcat + שרת Java שלי daemon = אובונטו 9.10 (קרמתי)


100
2018-05-04 15:37




ראה: serverfault.com/questions/48582/... - Juliano


תשובות:


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

שטח הכתובות (כלומר, זיכרון וירטואלי ברשימת התהליך) אינו עולה דבר; זה לא אמיתי. מה אמיתי הוא RSS (RES) טור, שהוא זיכרון תושב. זה כמה הזיכרון האמיתי שלך תהליך הוא כובש.

אבל אפילו זה לא כל התשובה. אם תהליך קורא מזלג (), הוא מתפצל לשני חלקים, ושניהם בתחילה לשתף את כל RSS שלהם. אז גם אם RSS היה בתחילה 1 GB, התוצאה לאחר forking יהיה שני תהליכים, כל אחד עם RSS של 1 GB, אבל אתה עדיין משתמש רק 1 GB של זיכרון.

מבולבל עדיין? הנה מה שאתה באמת צריך לדעת: השתמש free הפקודה ולבדוק את התוצאות לפני ואחרי הפעלת התוכנית שלך (על +/- buffers/cache שורה). ההבדל הוא כמה חדש הזיכרון החדש שלך התחיל התוכנית בשימוש.


119
2018-05-05 01:17



"בדוק תוצאות לפני ואחרי הפעלת התוכנית", לחילופין, להשתמש USS (גודל ייחודי גודל) כפי שהוחזר על ידי smem. - Hubert Kario
אז האם יש כלי שנותן את כמות הזיכרון האמיתית בשימוש, כלים שאינם צד שלישי. - CMCDragonkai
@CMCDragonkai כן, ללא תשלום. - deviantfan
אם אני מתחיל תהליך ג 'אווה דרך java -Xmx16g RunLong, אשר ישמור 16GB זיכרון עבור תהליך ג 'אווה, ולאחר מכן ב VIRT של הדף, נראה 16Gb נספר. במקרה זה, מה הוא סוג של זיכרון זה 16Gb, זה זיכרון ממופה או ..? - Eric Wang


מדף הדף (1):

o: VIRT  --  Virtual Image (kb)
      The  total  amount  of  virtual  memory  used  by the task.  It
      includes all code, data and shared libraries  plus  pages  that
      have been swapped out.

      VIRT = SWAP + RES.

כאשר RES פירושו זיכרון זיכרון (זיכרון פיזי).

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

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


22
2018-05-04 15:43



גם זה מעניין, אז הוא VIRT = SWAP + RES, איך זה להשתמש ב- SWAP שלי הוא אפס, בעוד זיכרון וירטואלי עבור תהליכי ג 'אווה 2 קרוב 1GB ?? - kapso
בעיקרון מראה למעלה .... החלפה: 1048568k סך הכל, 0k בשימוש, 1048568k ללא תשלום, 505728k במטמון - kapso
@ user42159 תשובה זו אינה נכונה! אין 'VIRT = SWAP + RES' בראש האדם! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT. חבל שלא אוכל לבטל את התשובה הזאת. - duleshi
תשובה זו אינה נכונה. USED ​​= Res + SWAP גודל (מ למעלה שדות ניהול, לגשת על ידי הקשה על מקש F כאשר בראש הדף גם מן הדף הדף). - Jason S


מצאתי את זה הסבר מאת מוגורל סומאריו מאוד ברור:

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

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

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


8
2018-01-27 17:53





עמודה VIRT ב PS / פלט העליון הוא כמעט לא רלוונטי למדוד את השימוש בזיכרון. אל תדאג. אפאצ 'י עומס כבד VIRT לעומת זיכרון RES

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



תודה, יש לי מודאג ומבולבל, כי תוך שימוש ב- swap היה 0%, טור זיכרון וירטואלי הוא גבוה מאוד. וגם יש לי רק 1.7GB של סה"כ 2.7GB זיכרון פיזי בשימוש, בעוד זיכרון וירטואלי גבוה? - kapso


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

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

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

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

מקור: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



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


VIRtual עמודה של הדף, מתייחס שטח סופר (שטח הצריכה העל) של התהליך, אשר התהליך עשוי לא לקחת בפועל בזמן ריצה. יש עוד עמודה RESident, המתייחסת לזיכרון הפיזי בפועל / שטח שהוקצה על ידי התהליך, בזמן הריצה.

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

עיין עוד מידע


2
2018-02-26 14:27





"VIRT" פשוט כתובת שטח, RES הוא זיכרון "אמיתי", אבל "SHR" (= משותף) כמות "RES" הוא חלק של RES כי הוא משותף עם תהליכים אחרים. אז עבור רוב התהליכים, אני מאמין כי על ידי הפחתת SHR מ RES נותן לך את כמות הזיכרון כי הוא באמת לייחס את התהליך הזה בפרט.


0
2018-04-18 23:03