GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, které procesy využívají swapovací prostor v Linuxu?

Nejlepší skript, který jsem našel, je na této stránce:http://northernmost.org/blog/find-out-what-is-using-your-swap/

Zde je jedna varianta skriptu a není potřeba 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"

Použijte smem

smem -s swap -r

Zde je odkaz, který vám řekne, jak jej nainstalovat a jak jej používat:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Zde je další varianta skriptu, která však má poskytovat čitelnější výstup (musíte jej spustit jako root, abyste získali přesné výsledky):

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

Spustit nahoře poté stiskněte O p Zadejte . Nyní by měly být procesy seřazeny podle využití swapu.

Zde je aktualizace, protože moje původní odpověď neposkytuje přesnou odpověď na problém, jak je uvedeno v komentářích. Z nejčastějších dotazů pro htop:

Není možné získat přesnou velikost použitého odkládacího prostoru procesu. Top předstírá tyto informace tím, že udělá SWAP =VIRT - RES, ale to není dobrá metrika, protože jiné věci, jako je videopaměť, se také počítají na VIRT (například:top říká, že můj proces X používá 81 milionů swapu, ale také hlásí můj systém jako celek používá pouze 2Mof swap. Proto do htop nebudu přidávat podobný sloupec Swap, protože neznám spolehlivý způsob, jak tyto informace získat (ve skutečnosti si nemyslím, že je možné získat přesné číslo, protože sdílených stránek).


Linux
  1. Jak přidat odkládací prostor v linuxu

  2. Jak zvětšit odkládací prostor v Linuxu

  3. Jak lze zjistit, které soubory zabírají 80 % místa na linuxovém webovém serveru?

  1. Jak zjistit nejlepší adresáře a soubory (místo na disku) v Linuxu

  2. Jak zjistit, kterou distribuci Linuxu používáte?

  3. Linux – Jak najít procesy pomocí sériového portu?

  1. Linux – Jak zjistit, jaké pevné disky jsou v systému?

  2. Jak zjistit, který Shell používáte v Linuxu

  3. Zjistěte osiřelé procesy Linuxu