سؤال أعلى الصفحة - ماذا يعني حجم الذاكرة الظاهرية؟ ... لينكس / أوبونتو


أنا أجري top لمراقبة أداء الخادم الخاص بي و 2 من عمليات جافا الخاصة بي تعرض الذاكرة الظاهرية التي تصل إلى 800 ميجابايت -1 جيجابايت. هل هذا شيء سيء؟

ماذا تعني الذاكرة الظاهرية؟

وأوه ، راجع للشغل ، لقد مبادلة من 1GB ويظهر 0 ٪ المستخدمة. لذلك أنا حائرة.

Java process = 1 خادم Tomcat + خادم جافا الخاص بي daemon Server = Ubuntu 9.10 (karmic)


100
2018-05-04 15:37


الأصل


نرى: serverfault.com/questions/48582/... - Juliano


الأجوبة:


الذاكرة الظاهرية ليست بالضرورة ذاكرة. على سبيل المثال ، إذا كانت عملية الذاكرة تقوم بتعيين ملف كبير ، يتم تخزين الملف بالفعل على القرص ، ولكنه لا يزال يحتل "مساحة العنوان" في العملية.

مساحة العنوان (أي الذاكرة الظاهرية في قائمة العمليات) لا تكلف أي شيء ؛ انها ليست حقيقية. ما هو حقيقي هو العمود (RES) RSS ، والذي هو الذاكرة المقيمة. هذا هو مقدار الذاكرة الفعلية التي تشغلها.

لكن حتى هذا ليس هو الحل الكامل. إذا كانت العملية تستدعي الشوكة () ، فإنها تنقسم إلى جزأين ، ويقوم كلاهما في البداية بمشاركة كل RSS الخاص بهما. لذلك ، حتى لو كان نظام RSS في البداية 1 غيغابايت ، فإن النتيجة بعد التفرع ستكون عمليتين ، كل واحدة منها تحتوي على آر إس إس 1 جيجابايت ، ولكنك لا تزال تستخدم 1 غيغابايت فقط من الذاكرة.

مرتبك حتى الآن؟ إليك ما تحتاج إلى معرفته حقًا: استخدم free القيادة والتحقق من النتائج قبل وبعد بدء البرنامج (على +/- buffers/cache خط). هذا الفرق هو كم الجديد ذاكرة برنامجك الذي بدأ حديثًا.


119
2018-05-05 01:17



"تحقق من النتائج قبل وبعد بدء تشغيل البرنامج" ، أو بدلاً من ذلك ، استخدم USS (حجم مجموعة فريد) كما يتم إرجاعها من قبل smem. - Hubert Kario
إذن هل هناك أداة تعطي المقدار الحقيقي من الذاكرة المستخدمة ، الأدوات التي ليست طرفًا ثالثًا. - CMCDragonkai
CMCDragonkai نعم ، مجاني. - deviantfan
إذا بدأت عملية جافا عبر java -Xmx16g RunLong، والتي من شأنها أن تحفظ ذاكرة 16GB لعملية جافا ، ثم في VIRT من أعلى ، يبدو يتم حساب 16GB. في هذه الحالة ، ما هو نوع هذه الذاكرة 16 جيجا ، هو أن الذاكرة المعينة أو ..؟ - 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 تعني الذاكرة الساكنة (الذاكرة الفعلية المستخدمة).

في الواقع هذا غير صحيح (بعد الآن). عندما تظهر عبارة "مبادلة" ، والتي تتضمن أيضًا الملفات التي قام البرنامج بتعيينها في مساحة عنوانها ، والتي قد تستهلك ذاكرة الوصول العشوائي الحقيقية أو لا تستهلكها بالفعل. هذه الذاكرة مدعومة من الملفات ولكنها ليست مبادلة حقاً.

يتضمن VIRT أيضًا الصفحات التي تم تخصيصها ولكن لم يتم استخدامها لأي شيء حتى الآن. يتم تعيين أي صفحة في هذه الحالة إلى kernel Zero Page (المفهوم الرائع - يجب أن تبحث عنه) حتى يظهر في VIRT ولكنه لا يستهلك أي ذاكرة بالفعل.


22
2018-05-04 15:43



حسنا هذا هو المثير للاهتمام ، لذلك هو VIRT = SWAP + RES ، فكيف استخدام SWAP الخاص بي هو صفر ، في حين أن الذاكرة الظاهرية لعمليات جافا 2 قريبة من 1GB؟ - kapso
أساسا عروض أعلى .... مقايضة: 1048568k الإجمالي ، 0 كيلو المستخدمة ، 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 Size (من أعلى إدارة الحقول ، يمكن الوصول إليها عن طريق الضغط على المفتاح f عندما تكون في الأعلى. وكذلك من أعلى الصفحة man). - Jason S


لقد وجدت هذا شرح من Mugurel Sumanariu واضح جدا:

VIRT لتقف على الحجم الافتراضي لعملية ، وهو مجموع   الذاكرة التي تستخدمها بالفعل ، الذاكرة التي حددتها في نفسها (ل   على سبيل المثال ذاكرة الوصول العشوائي لبطاقة الفيديو للخادم X) ، والملفات الموجودة على القرص ذلك   تم تعيينها في ذلك (أبرزها المكتبات المشتركة) ، والذاكرة   تقاسمها مع العمليات الأخرى. يمثل VIRT مقدار الذاكرة   البرنامج قادر على الوصول في الوقت الحاضر.

RES يقف لحجم المقيمين ، وهو تمثيل دقيق   من مقدار الذاكرة الفعلية الفعلية التي تستهلكها العملية. (هذا ايضا   يتوافق مباشرة مع العمود MEM٪.) هذا دائماً افتراضياً   يكون أقل من حجم VIRT ، لأن معظم البرامج تعتمد على C   مكتبة.

SHR يشير إلى مقدار حجم VIRT قابل للمشاركة بالفعل (الذاكرة   أو المكتبات). في حالة المكتبات ، لا يعني ذلك بالضرورة   أن المكتبة بأكملها مقيمة. على سبيل المثال ، إذا كان البرنامج فقط   يستخدم عدد قليل من الوظائف في المكتبة ، يتم تعيين المكتبة بأكملها و   سيتم احتسابها في VIRT و SHR ، ولكن فقط أجزاء المكتبة   سيتم بالفعل تحميل الملف الذي يحتوي على الوظائف المستخدمة   وتحسب تحت RES.


8
2018-01-27 17:53





يعد عمود VIRT الموجود في الإخراج ps / top غير ذي صلة بقياس استخدام الذاكرة. لا تقلق بشأن ذلك. تحميل أباتشي الثقيلة VIRT مقابل RES الذاكرة

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


5
2018-05-04 15:41



شكرا ، لقد شعرت بالقلق والحيرة ، لأنه في حين كان استخدام المبادلة 0 ٪ ، وعمود الذاكرة الظاهرية مرتفع جدا. وأيضا لدي 1.7 جيجابايت فقط من إجمالي 2.7 ميغابايت من الذاكرة الفعلية المستخدمة ، في حين أن الذاكرة الظاهرية عالية؟ - kapso


يدعم Linux الذاكرة الظاهرية ، أي باستخدام قرص كامتداد لذاكرة الوصول العشوائي بحيث ينمو الحجم الفعال للذاكرة القابلة للاستخدام في مقابل ذلك. ستقوم kernel بكتابة محتويات كتلة الذاكرة غير المستخدمة حاليًا إلى القرص الثابت بحيث يمكن استخدام الذاكرة لغرض آخر. عندما تكون هناك حاجة إلى المحتويات الأصلية مرة أخرى ، يتم قراءتها مرة أخرى في الذاكرة. كل هذا جعله شفافًا تمامًا للمستخدم ؛ لا تشاهد البرامج التي تعمل في Linux إلا مقدار أكبر من الذاكرة المتوفرة ولا تلاحظ وجود أجزاء منها على القرص من وقت لآخر. وبطبيعة الحال ، فإن قراءة القرص الثابت وكتابته أبطأ (بترتيب ألف مرة أبطأ) من استخدام الذاكرة الحقيقية ، بحيث لا تعمل البرامج بسرعة. يدعى جزء القرص الثابت المستخدم كذاكرة ظاهرية مساحة المبادلة.

يمكن أن يستخدم Linux ملفًا عاديًا في نظام الملفات أو قسمًا منفصلاً لمساحة التبادل. قسم التبديل أسرع ، ولكن من الأسهل تغيير حجم ملف المبادلة (ليس هناك حاجة لإعادة تقسيم القرص الثابت بأكمله ، وربما تثبيت كل شيء من الصفر). عندما تعرف مساحة التبادل التي تحتاجها ، يجب أن تذهب إلى قسم التبادل ، ولكن إذا كنت غير متأكد ، فيمكنك استخدام ملف المبادلة أولاً ، استخدام النظام لفترة من الوقت حتى يتسنى لك التعرف على مقدار التبادل تحتاج ، ثم قم بإنشاء قسم مبادلة عندما تكون واثقاً من حجمها.

يجب أن تعلم أيضًا أن Linux يسمح لأحد باستخدام عدة أجزاء مبادلة و / أو تبديل الملفات في نفس الوقت. هذا يعني أنه إذا كنت تحتاج أحيانًا فقط إلى مقدار غير عادي من مساحة المبادلة ، فيمكنك إعداد ملف مبادلة إضافي في مثل هذه الأوقات ، بدلاً من الاحتفاظ بالمبلغ بأكمله مخصص طوال الوقت.

ملاحظة حول مصطلحات نظام التشغيل: عادة ما يميز علم الكمبيوتر بين المبادلة (كتابة العملية بأكملها إلى مساحة المبادلة) والترحيل (الكتابة فقط أجزاء ذات حجم ثابت ، عادة بضعة كيلوبايت ، في وقت واحد). عادة ما يكون الترحيل أكثر فعالية ، وهذا ما يفعله لينكس ، لكن مصطلحات لينكس التقليدية تتحدث عن التبادل على أي حال.

مصدر: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



تنشر هذه الإجابة الاعتقاد الخاطئ بأن الذاكرة الظاهرية هي نفسها للتبديل أو الاستدعاء. استخدام القرص كملحق ذاكرة RAM يسبق الذاكرة الظاهرية. وهناك الكثير من الأنظمة (مثل معظم أجهزة التوجيه SoHo) التي تحتوي على ذاكرة ظاهرية ولكنها لا تستخدم القرص كإمتداد لذاكرة الوصول العشوائي. (وليس هذا هو الجواب على سؤال البروتوكول الاختياري ، لأنه لا يستخدم أي مقايضة). - David Schwartz


VIRtual عمود من الأعلى ، يشير إلى الفضاء الفائق (مساحة الاستهلاك الفائق) للعملية ، والتي قد لا تأخذها العملية بالفعل في وقت التشغيل. هناك عمود آخر RESident، والتي تشير إلى الذاكرة الفعلية الفعلية / المساحة التي تخصصها العملية ، في وقت التشغيل.

يمكن فهم سبب الاختلاف بين الاثنين ، على سبيل المثال: إذا كانت العملية تستخدم مكتبة معينة ، فإن حجم المكتبة ، سيساعد أيضًا virtual-size. ومع ذلك ، حيث سيتم استخدام جزء من المكتبة فقط (أي بعض الأساليب المستخدمة) ، بحيث يساعد في ذلك resident-size.

اشير مزيد من المعلومات


2
2018-02-26 14:27





"VIRT" مساحة العنوان فقط ، RES هي الذاكرة "الحقيقية" ، ولكن "SHR" (= shared) مقدار "RES" هو جزء RES الذي تتم مشاركته مع العمليات الأخرى. لذلك بالنسبة لمعظم العمليات ، أعتقد أنه عن طريق طرح SHR من RES يعطيك مقدار الذاكرة التي تعزى إلى هذه العملية بالتحديد.


0
2018-04-18 23:03