GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo saber qué procesos están usando el espacio de intercambio en Linux?

El mejor script que encontré está en esta página:http://northernmost.org/blog/find-out-what-is-using-your-swap/

Aquí hay una variante del script y no se necesita 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

Aquí hay un enlace que le indica cómo instalarlo y cómo usarlo:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Aquí hay otra variante de la secuencia de comandos, pero destinada a brindar una salida más legible (debe ejecutar esto como root para obtener resultados exactos):

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

Ejecutar arriba luego presione O p Entrar . Ahora los procesos deben ordenarse por su uso de intercambio.

Aquí hay una actualización ya que mi respuesta original no proporciona una respuesta exacta al problema como se indica en los comentarios. De las preguntas frecuentes de htop:

No es posible obtener el tamaño exacto del espacio de intercambio utilizado de un proceso. Top falsifica esta información al hacer SWAP =VIRT - RES, pero esa no es una buena métrica, porque otras cosas como la memoria de video también cuentan en VIRT (por ejemplo:top dice que mi proceso X está usando 81M de intercambio, pero también informa mi sistema como un todo está usando solo 2Mof de intercambio. Por lo tanto, no agregaré una columna de intercambio similar a htop porque no conozco una forma confiable de obtener esta información (en realidad, no creo que sea posible obtener un número exacto, porque de páginas compartidas).


Linux
  1. Cómo encontrar los principales directorios y archivos (espacio en disco) en Linux

  2. Linux:¿cómo encontrar procesos usando el puerto serie?

  3. Cómo encontrar qué Shell está utilizando en Linux

  4. Cómo aumentar el espacio de intercambio en Linux

  5. ¿Cómo saber qué proceso está usando un archivo en Linux?

Cómo extender el espacio de intercambio usando el archivo de intercambio en Linux

Cómo saber a qué grupos pertenece un usuario en Linux

Averigüe qué procesos están escuchando en un puerto particular en Linux

Aquí le mostramos cómo averiguar qué entorno de escritorio está utilizando

Cómo verificar el espacio de intercambio en Linux

Cómo encontrar qué versión de Linux está ejecutando