¿La mejor manera de saber qué aplicación/proceso está utilizando swap?

¿La mejor manera de saber qué aplicación/proceso está utilizando swap?

Tengo 16G de RAM y una partición de intercambio de 8G. Estoy ejecutando Unity 17.04. Tengo un problema donde mi buff/cacheva a 11M y mi swap usedva a alrededor de 3500. Anteriormente casi nunca usaba ningún espacio de intercambio y nunca monitoreé el beneficio/caché.

Creo que es una aplicación con pérdida de memoria, pero puedo estar equivocado.

Pregunta simple. ¿Hay alguna manera fácil de determinar si la aplicación/proceso está o ha estado usando swap?

ingrese la descripción de la imagen aquí

Respuesta1

Puede encontrar cuánto utiliza el proceso especial la partición de intercambio con este comando:

cat /proc/"PID"/status | grep "^VmSwap"

Y puedes encontrarlo PIDcon este comando:

ps -A | grep "Application_name"

Pero si quieres saber qué procesos están usando la partición de intercambio, puedes usar este script:

#!/bin/bash
for i in /proc/*/status ; do
    vmswap=$(cat $i | grep "^VmSwap")
    echo "$vmswap" | grep -qv ' 0 kB'
    if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
        echo "$i : $vmswap"
    fi
done

Luego puede encontrar el nombre de la aplicación a partir de su PID que devuelve el script.

Actualizar: Cambié este script para crear un archivo de registro cada 10 segundos (puedes cambiar el tiempo) y en ese archivo puedes ver muchos procesos desde el momento en que ejecutas este script hasta ahora:

#!/bin/bash
counter=1
touch ~/swap_process_usage.log
while true ; do
    echo -e "************************************\nSwap's process in count $counter " >> ~/swap_process_usage.log
    for i in /proc/*/status ; do
        vmswap=$(cat $i | grep "^VmSwap")
        echo "$vmswap" | grep -qv ' 0 kB'
        if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
            pid=$(echo "$i" | tr -d /proc/ | tr -d status)
            proc_name=$(ps -p $pid -o comm=)
            echo "$proc_name : $pid : $vmswap" >> ~/swap_process_usage.log
        fi
    done
    sleep 10s
    counter=$((counter+1))
done

Y puede configurar este script para que se ejecute enpuesta en marchaentonces crea un registro cada vez.

información relacionada