سؤال أفضل طريقة لمعرفة ما هو التطبيق / العملية التي تستخدم المبادلة؟


لدي 16G RAM ، وقسم المبادلة 8G. أنا أدير الوحدة 17.04. لدي مشكلة حيث بلدي buff/cache يذهب إلى 11M ، وبلدي swap used يذهب إلى حوالي 3500. في السابق كنت تقريبا أبدا استخدام أي مساحة المبادلة ، وأنا لم يراقب أبدا برتقالي / ذاكرة التخزين المؤقت.

أعتقد أنه تطبيق مع تسرب للذاكرة ، ولكن قد أكون مخطئا.

سؤال بسيط. هل هناك طريقة سهلة لتحديد ما إذا كان التطبيق / العملية ، أو تم استخدام ، مبادلة؟

enter image description here


1
2018-05-27 22:06


الأصل


احتمال واحد آخر هو ذلك vm.swappiness قد تكون عالية ، والتي يمكن أن تدفع الأشياء إلى مقايضة إذا كان نظام التشغيل يعتقد أنها لن تحتاج إليها لفترة طويلة ، حتى لو كان هناك الكثير من ذاكرة الوصول العشوائي المفتوحة. - Chai T. Rex
@ ChaiT.Rex همهمة ... أتساءل ... قبل 17.04 كان لي vm.swappiness = 10 ... ولكن بعد الترقية إلى 17.04 أنا مرة أخرى إلى التقصير من 60. أتساءل عما إذا كان هذا عن الوقت الذي أنا لاحظت هذا؟ قد أضطر إلى إعادتها ورؤية ما يحدث. شكر! - heynnema
@ ChaiT.Rex جيدا ، لعبت مع vm.swappiness ، وأخيرا استقر على = 10 مرة أخرى ، كما كان من قبل. بلدي برتقالي / ذاكرة التخزين المؤقت الاستخدام لا يزال 11-12G بعد بضعة أيام ، ولكن أعتقد أن هذا طبيعي ، ما دام الاستفادة من ميم يبقى عالية. إذا جعلت تعليقك في إجابة ، يمكنني التصويت / قبوله. - heynnema


الأجوبة:


يمكنك العثور على مدى استخدام العملية الخاصة لقسم المبادلة بواسطة هذا الأمر:

cat /proc/"PID"/status | grep "^VmSwap"

ويمكنك أن تجد PID بواسطة هذا الأمر:

ps -A | grep "Application_name"

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

#!/bin/bash
for i in /proc/*/status ; do
    vmswap=$(cat $i | grep "^VmSwap")
    echo "$vmswap" | grep -qv ' 0 kB'
    if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
        echo "$i : $vmswap"
    fi
done

ثم يمكنك العثور على اسم التطبيق من PID الخاص به الذي تم إرجاعه بواسطة البرنامج النصي.

تحديث: لقد قمت بتغيير هذا البرنامج النصي لإنشاء ملف سجل كل 10 ثوان (يمكنك تغيير الوقت) وفي هذا الملف يمكنك مشاهدة العديد من العمليات من لحظة تشغيل هذا البرنامج النصي حتى الآن:

#!/bin/bash
counter=1
touch ~/swap_process_usage.log
while true ; do
    echo -e "************************************\nSwap's process in count $counter " >> ~/swap_process_usage.log
    for i in /proc/*/status ; do
        vmswap=$(cat $i | grep "^VmSwap")
        echo "$vmswap" | grep -qv ' 0 kB'
        if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
            pid=$(echo "$i" | tr -d /proc/ | tr -d status)
            proc_name=$(ps -p $pid -o comm=)
            echo "$proc_name : $pid : $vmswap" >> ~/swap_process_usage.log
        fi
    done
    sleep 10s
    counter=$((counter+1))
done

ويمكنك ضبط هذا البرنامج النصي ليعمل في أبدء لذلك يخلق سجل في كل مرة.


3
2018-05-27 22:33



شكر! سأجربها بمجرد أن يتسلق مبادلتي مرة أخرى سوف أعود وأصوت / أقبل ذلك. - heynnema
تسللت مبادلتي مرة أخرى ، وحاولت البرنامج النصي الخاص بك (وآخر واحد وجدته) وكلاهما لم يرد أي شيء. يبدو أنهم قد يبلغون فقط إذا كانت العملية نشطة حاليًا وتستخدم حاليًا التبادل؟ +1 التصويت. أعيد إعداد إعدادات vm.swappiness حاليًا. - heynnema
heynnema شكرا لردكم. نعم هذا البرنامج النصي يبين أن العملية التي تستخدم الخاص بك swap partition ، لأنك قلت: "هل هناك طريقة سهلة لتحديد مع التطبيق / العملية ، أو تم ، استخدام المبادلة؟" ولكن إذا لم يتم استخدام المقايضة الخاصة بك ، فلن يكون هذا النص مفيدًا ولم يتم الإبلاغ عن أي شيء. هل تستخدم مقايضتك؟ - Ali Razmdideh
نعم ، جربت البرنامج النصي عندما أظهر استخدام التقسيم التبادلي. أنا أعتقد أنه إذا لم يكن استخدام المبادلة حاليا بنشاط المستخدمة ، فإن البرامج النصية لا شيء. بمعنى آخر ، لن تعرض البرامج النصية ما استخدم التبديل في الماضي ، إذا لم يكن هناك نشاط حالي. - heynnema
heynnema شكرا لردكم. لقد قمت بتغيير البرنامج النصي الخاص بي ليظهر تبادل الماضي معالجة. يرجى المحاولة هذا البرنامج النصي - Ali Razmdideh