GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich heraus, welche Prozesse Swap Space in Linux verwenden?

Das beste Skript, das ich gefunden habe, ist auf dieser Seite:http://northernmost.org/blog/find-out-what-is-using-your-swap/

Hier ist eine Variante des Skripts und kein Root erforderlich:

#!/bin/bash 
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo

SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`
    for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

Verwenden Sie smem

smem -s swap -r

Hier ist ein Link, der Ihnen erklärt, wie Sie es installieren und verwenden:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Hier ist eine andere Variante des Skripts, die jedoch eine besser lesbare Ausgabe liefern soll (Sie müssen dies als root ausführen, um genaue Ergebnisse zu erhalten):

#!/bin/bash

    # find-out-what-is-using-your-swap.sh
    # -- Get current swap usage for all running processes
    # --
    # -- rev.0.3, 2012-09-03, Jan Smid          - alignment and intendation, sorting
    # -- rev.0.2, 2012-08-09, Mikko Rantalainen - pipe the output to "sort -nk3" to get sorted output
    # -- rev.0.1, 2011-05-27, Erik Ljungstrom   - initial version


SCRIPT_NAME=`basename $0`;
SORT="kb";                 # {pid|kB|name} as first parameter, [default: kb]
[ "$1" != "" ] && { SORT="$1"; }

[ ! -x `which mktemp` ] && { echo "ERROR: mktemp is not available!"; exit; }
MKTEMP=`which mktemp`;
TMP=`${MKTEMP} -d`;
[ ! -d "${TMP}" ] && { echo "ERROR: unable to create temp dir!"; exit; }

>${TMP}/${SCRIPT_NAME}.pid;
>${TMP}/${SCRIPT_NAME}.kb;
>${TMP}/${SCRIPT_NAME}.name;

SUM=0;
OVERALL=0;
    echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;

for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`;
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`

    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done

    if (( $SUM > 0 ));
    then
        echo -n ".";
        echo -e "${PID}\t${SUM}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.pid;
        echo -e "${SUM}\t${PID}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.kb;
        echo -e "${PROGNAME}\t${SUM}\t${PID}" >> ${TMP}/${SCRIPT_NAME}.name;
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;
echo;
echo "Overall swap used: ${OVERALL} kB";
echo "========================================";
case "${SORT}" in
    name )
        echo -e "name\tkB\tpid";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.name|sort -r;
        ;;

    kb )
        echo -e "kB\tpid\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.kb|sort -rh;
        ;;

    pid | * )
        echo -e "pid\tkB\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.pid|sort -rh;
        ;;
esac
rm -fR "${TMP}/";

Führen Sie oben aus drücken Sie dann O p Eingabe . Jetzt sollten Prozesse nach ihrer Swap-Nutzung sortiert werden.

Hier ist ein Update, da meine ursprüngliche Antwort keine genaue Antwort auf das Problem gibt, wie in den Kommentaren angegeben. Aus den htop-FAQ:

Es ist nicht möglich, die genaue Größe des verwendeten Auslagerungsspeichers eines Prozesses zu ermitteln. Top täuscht diese Informationen vor, indem es SWAP =VIRT - RES macht, aber das ist keine gute Metrik, weil andere Dinge wie Videospeicher ebenfalls auf VIRT zählen (zum Beispiel:Top sagt, dass mein X-Prozess 81 MB Swap verwendet, aber es meldet auch mein System verwendet als Ganzes nur 2Mof swap. Daher werde ich htop keine ähnliche Swap-Spalte hinzufügen, da ich keinen zuverlässigen Weg kenne, um diese Informationen zu erhalten (eigentlich glaube ich nicht, dass es möglich ist, eine genaue Zahl zu erhalten, weil von geteilten Seiten).


Linux
  1. Finden Sie verwaiste Linux-Prozesse heraus

  2. Wie finde ich heraus, was den ganzen Speicherplatz auf meiner /-Partition belegt?

  3. Wie finde ich heraus, über welche Schnittstelle ich mich mit dem Internet verbinde?

  4. Linux:Woher wissen, welche Prozesse an welchen Kern geheftet sind?

  5. Wie findet man heraus, welche Dateien 80 % des Speicherplatzes auf einem Linux-Webserver einnehmen?

So erweitern Sie den Auslagerungsbereich mithilfe der Auslagerungsdatei in Linux

So finden Sie heraus, zu welchen Gruppen ein Benutzer in Linux gehört

Finden Sie heraus, welche Prozesse auf einem bestimmten Port in Linux lauschen

So finden Sie heraus, welche Desktop-Umgebung Sie verwenden

So überprüfen Sie den Auslagerungsbereich unter Linux

So finden Sie heraus, welche Linux-Version Sie ausführen