Které procesy v Linuxu využívají swap

Pro zjištění, které procesy v Linuxu využívají swap a jak moc, můžete použít několik nástrojů. Zde je několik možností:

  1. Příkaz top: Spusťte příkaz top v terminálu a stiskněte klávesu „S“ pro seřazení procesů podle využití swapu. Budete vidět seznam procesů, které aktuálně využívají swap, spolu s informacemi o jejich využití. Klávesou „q“ můžete opustit příkaz top.
  2. Příkaz smem: Příkaz smem je nástroj pro monitorování paměti v Linuxu. Můžete ho nainstalovat pomocí správce balíčků systému a spustit příkaz smem -s nebo smem -r pro zobrazení procesů seřazených podle využití swapu. Tento příkaz poskytuje podrobné informace o využití paměti, včetně využití swapu jednotlivých procesů.
  3. Příkaz pmap: Příkaz pmap umožňuje zobrazit mapování paměti procesu. Můžete jej spustit s volbou -x následovanou PIDem procesu, abyste získali podrobné informace o paměti používané daným procesem, včetně využití swapu.

Příklady použití příkazů:

top
smem -s
smem -r
pmap -x <PID>

Ve všech případech získáte informace o využití swapu pro jednotlivé procesy v Linuxu.

Zde je ukázkový Bash skript, který vypíše procesy využívající swap a jejich využití:

#!/bin/bash

echo "Procesy využívající swap:"
echo "=========================="

# Získání seznamu procesů využívajících swap pomocí příkazu 'smem'
processes=$(smem -rs swap | tail -n +2)

# Výpis seznamu procesů
echo "$processes"

Tento skript využívá příkaz smem k získání informací o využití swapu procesů a poté je vypíše. Ujistěte se, že máte nainstalovaný nástroj smem v systému. Skript spustíte tak, že ho uložíte do souboru s příponou .sh (například swap_processes.sh), a pak spustíte v terminálu pomocí příkazu bash swap_processes.sh.

Můžete použít příkaz ps spolu s příkazem awk, abyste získali informace o využití swapu procesů. Zde je příklad Bash skriptu, který to provede:

#!/bin/bash

echo "Procesy využívající swap:"
echo "=========================="

# Získání seznamu procesů využívajících swap pomocí příkazu 'ps' a 'awk'
processes=$(ps axo pid,comm,pmem,pcpu,swap --sort=-swap | awk '$5 != 0')

# Výpis seznamu procesů
echo "$processes"

Tento skript využívá příkaz ps s volbou axo pro získání informací o PIDu, názvu procesu, využití paměti (procento) a využití swapu procesů. Poté se pomocí příkazu awk zpracovávají výsledky tak, aby byly zobrazeny pouze procesy s nenulovým využitím swapu. Skript poté vypíše výsledný seznam procesů.

Podobně jako u předchozího skriptu, uložte tento kód do souboru s příponou .sh (například swap_processes.sh) a spusťte ho v terminálu pomocí příkazu bash swap_processes.sh.

Tímto způsobem lze získat informace o využití swapu procesů bez použití nástroje smem.

Existuje více způsobů, jak získat informace o využití swapu procesů v Linuxu. Zde je další možnost pomocí příkazu pmap:

#!/bin/bash

echo "Procesy využívající swap:"
echo "=========================="

# Získání seznamu procesů pomocí příkazu 'pmap' a 'grep'
processes=$(pmap -x $(pidof -s bash) | grep -e "^ *[0-9]")

# Výpis seznamu procesů
echo "$processes"

Tento skript používá příkaz pmap s volbou -x pro získání podrobných informací o paměti a mapování procesů. Pomocí příkazu pidof -s bash získáme PID procesu Bash, kterým je spuštěn skript. Poté se výstup příkazu pmap -x filtruje pomocí příkazu grep, aby zobrazil pouze řádky obsahující čísla PID procesů a informace o swapu. Skript vypíše výsledný seznam procesů.

Ujistěte se, že máte nainstalovaný příkaz pmap v systému. Opět uložte tento kód do souboru s příponou .sh (například swap_processes.sh) a spusťte ho v terminálu pomocí příkazu bash swap_processes.sh.

Tímto způsobem získáte informace o využití swapu procesů pomocí příkazu pmap a grep.

Komplexní script, který jsem nalezl:

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

Jiný příklad scriptu:

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

Diskuze

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přejít nahoru