GNU/Linux >> Linux Esercitazione >  >> Linux

Come scoprire quali processi utilizzano lo spazio di swap in Linux?

Il miglior script che ho trovato è in questa pagina:http://northernmost.org/blog/find-out-what-is-using-your-swap/

Ecco una variante dello script e non è necessario il root:

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

Usa smem

smem -s swap -r

Ecco un link che ti dice sia come installarlo che come usarlo:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Ecco un'altra variante dello script, ma pensata per fornire un output più leggibile (devi eseguirlo come root per ottenere risultati esatti):

#!/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}/";

Esegui in alto quindi premi O p Invio . Ora i processi dovrebbero essere ordinati in base al loro utilizzo dello swap.

Ecco un aggiornamento poiché la mia risposta originale non fornisce una risposta esatta al problema come sottolineato nei commenti. Dalle FAQ di htop:

Non è possibile ottenere la dimensione esatta dello spazio di scambio utilizzato da un processo. Top falsifica queste informazioni rendendo SWAP =VIRT - RES, ma questa non è una buona metrica, perché anche altre cose come la memoria video contano su VIRT (ad esempio:top dice che il mio processo X sta usando 81 M di swap, ma riporta anche il mio sistema nel complesso utilizza solo 2Mof swap.Pertanto, non aggiungerò una colonna Swap simile a htopperché non conosco un modo affidabile per ottenere queste informazioni (in realtà, non penso sia possibile ottenere un numero esatto, perché di pagine condivise).


Linux
  1. Come sapere quale distribuzione Linux stai utilizzando?

  2. Scopri i processi orfani di Linux

  3. Come aumentare lo spazio di swap su Linux

  4. Linux:come sapere quali processi sono bloccati su quale core?

  5. Come si fa a trovare quali file occupano l'80% dello spazio su un server Web Linux?

Come estendere lo spazio di scambio utilizzando il file di scambio in Linux

Come scoprire a quali gruppi appartiene un utente in Linux

Scopri quali processi sono in ascolto su una porta particolare in Linux

Ecco come scoprire quale ambiente desktop stai utilizzando

Come controllare lo spazio di scambio in Linux

Come trovare la versione di Linux in esecuzione