Beste Möglichkeit, festzustellen, welche Anwendung/welcher Prozess Swap verwendet?

Beste Möglichkeit, festzustellen, welche Anwendung/welcher Prozess Swap verwendet?

Ich habe 16 GB RAM und eine 8 GB Swap-Partition. Ich verwende Unity 17.04. Ich habe ein Problem, bei dem mein buff/cacheSwap-Speicher auf 11 MB und mein swap usedSwap-Speicher auf etwa 3500 MB sinkt. Bisher habe ich fast nie Swap-Speicher verwendet und den Buff/Cache nie überwacht.

Ich glaube, dass es sich um eine Anwendung mit einem Speicherleck handelt, aber ich könnte mich irren.

Einfache Frage. Gibt es eine einfache Möglichkeit, festzustellen, welche Anwendung/welcher Prozess Swap verwendet oder verwendet hat?

Bildbeschreibung hier eingeben

Antwort1

Mit diesem Befehl können Sie ermitteln, in welchem ​​Umfang ein spezieller Prozess die Swap-Partition nutzt:

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

PIDUnd Sie können es mit diesem Befehl finden :

ps -A | grep "Application_name"

Wenn Sie jedoch herausfinden möchten, welche Prozesse die Swap-Partition verwenden, können Sie dieses Skript verwenden:

#!/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

Anschließend können Sie den Anwendungsnamen anhand der vom Skript zurückgegebenen PID ermitteln.

Aktualisieren: Ich habe dieses Skript geändert, um alle 10 Sekunden eine Protokolldatei zu erstellen (Sie können die Zeit ändern) und in dieser Datei können Sie viele Prozesse vom Moment der Ausführung dieses Skripts bis jetzt sehen:

#!/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

Sie können das Skript so einstellen, dass es ausgeführt wird beiStart-updaher wird jedes Mal ein Protokoll erstellt.

verwandte Informationen