سؤال

هل يمكن لأي شخص أن يقدم شرحًا واضحًا لمعنى قيم SIZE وRSS التي نحصل عليها من prstat في Solaris؟

لقد كتبت تطبيق اختبار C++ يخصص الذاكرة معه new[], ، يملأها ويحررها delete[].

كما فهمت، يجب أن تكون قيمة SIZE مرتبطة بحجم الذاكرة الافتراضية التي تم "حجزها" بواسطة العملية، أي الذاكرة "المخصصة" أو "المحدثة".

لا يتم تلخيص تلك الذاكرة في قيمة RSS إلا إذا استخدمتها حقًا (ملء بعض القيم).ولكن حتى لو قمت بتحرير الذاكرة، فإن خدمة RSS لن تسقط.

لا أفهم ما هو الدلالي الذي يمكنني تعيينه بشكل صحيح لهاتين القيمتين.

هل كانت مفيدة؟

المحلول

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

إذا كنت تريد ذاكرة محررة إلى أن تعاد فورا بعد مجانا، يمكنك استخدام مخصص سولاريس mmap مثل هذا:

export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap

نصائح أخرى

مقاس هو إجمالي حجم الذاكرة الظاهرية للعملية، بما في ذلك كافة الملفات والأجهزة المعينة، و آر إس إس يجب أن يكون حجم المجموعة المقيمة، ولكنه غير موثوق به تمامًا، ويجب أن تحاول الحصول على هذه المعلومات منه com.pmap.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top