kswapd0 está tomando mucha CPU

25

kswapd0 está tomando el 99.9% de mi CPU, como me muestra la parte superior, el problema apareció hoy al jugar y la primera vez que desapareció después de 6 minutos, y ahora lo ha estado haciendo durante unos 20 minutos. ¿Cómo se puede reparar y qué está causando esto?

    
pregunta Kaspar 22.02.2013 - 12:32

2 respuestas

25

El proceso kswapd0 es el proceso que administra la memoria virtual. Su máquina "debería" tener RAM, SWAP y el EXT4 en su HDD / SSD. La ext4 es donde se almacena todo, y siempre es más lento acceder desde la RAM. La RAM es como un espacio de ejecución a mitad de camino para que los programas accedan a la información rápidamente. La mayoría de las computadoras tienen al menos 4GB de RAM, que en condiciones normales es suficiente. Sin embargo, cuando juegas un juego, puedes quedarte sin espacio en la RAM, que es donde SWAP entra.

SWAP es una RAM falsa ubicada en su HDD / SSD al lado de su EXT4. Es más rápido de acceder que el EXT4, pero es mucho más lento que la RAM real. Cuando se queda sin memoria, kswapd0 mueve los programas que no está usando / no está usando tanto como otros programas al SWAP, lo que causa un retraso extremo en esos procesos. Si su juego necesitara 5GB de RAM, 1GB por lo menos estaría en SWAP. Eso significa que cuando intenta acceder a esa información, tiene que esperar más tiempo para obtenerla.

Todo este proceso provoca un uso extremo de la CPU, moviendo información desde y hacia SWAP y RAM y manejando la solicitud de información al mismo tiempo. ¿Cómo resolver este problema?

  1. Dígale a kswapd0 que solo mueva cosas a SWAP cuando esté completamente FUERA de RAM. Este es el método más efectivo para resolver problemas de SWAP. Ejecutar

    echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf

    donde 0 es el porcentaje que queda fuera de 100 en el que se debe usar SWAP (cuando le queda 0% de RAM, SWAP comenzará a tomar los datos). También puedes editar /etc/sysctl.conf a tu gusto en lugar de agregar este comando al final cada vez que uses gedit o nano o lo que sea, asegúrate de sudo, este archivo es propiedad de raíz. ¡Reinicia y ya estás listo!

  2. Reduzca el consumo de RAM por otros procesos o cierre otros programas mientras ejecuta programas de alta memoria. Esta es la razón por la que la mayoría de los juegos le dicen que cierre todas las demás ventanas antes de jugar o que las instalaciones hagan lo mismo. Cosas como los servicios de sincronización de archivos tienden a requerir mucha memoria.
  3. Compra más RAM. Instalar RAM no es tan difícil como parece. Uno o dos tornillos en un compartimiento pequeño (si está en una computadora portátil) y un simple clic. ¡Sólo asegúrese de que está comprando el tipo correcto!
  4. Reduzca los procesos de la CPU como lo hizo con la RAM. Esto ayudará a que las ráfagas de RAM a SWAP sean mucho más suaves.

Eso es lo mejor que puedes hacer. Otros pueden decir deshabilitar el intercambio completamente, pero eso es peligroso y NO lo recomendaría. Eso puede hacer que todos los sistemas se bloqueen si hay una pérdida de memoria o demasiadas aplicaciones en ejecución. Solo tenga en cuenta que el SWAP es a prueba de fallos para la RAM. Definitivamente, no es tan rápido ni eficiente como la memoria RAM, ¡pero es mejor que el archivo de paginación de Windows! (que cumple el mismo propósito)

EDITAR: si está interesado en obtener más información sobre SWAP, consulte aquí .

    
respondido por el Zzzach... 30.09.2014 - 16:37
22

kswapd0 se ejecuta al 99.9% de una CPU, pero en realidad no está intercambiando nada

A mí me sucede a veces en Ubuntu 14.04 con kernel 3.19.0-50-generic (y anterior) ejecutándose en una VMware vm. No tengo ni idea de lo que lo hizo aparecer, pero aparece durante el tiempo de inactividad.

top muestra:

# top
top - 09:49:35 up 5 days, 18:35,  1 user,  load average: 1.00, 1.00, 0.99
Tasks: 219 total,   2 running, 217 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 74.7 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   3028784 total,  1874468 used,  1154316 free,  1010276 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.   234928 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    52 root      20   0       0      0      0 R  99.7  0.0 122:15.21 kswapd0
     3 root      20   0       0      0      0 S   0.3  0.0   0:29.86 ksoftirqd/0
     7 root      20   0       0      0      0 S   0.3  0.0   9:49.47 rcu_sched

Solución temporal

un reinicio resolvió el problema, temporalmente.

siguiendo la respuesta en serverfault (kswapd utiliza a menudo 100% de CPU cuando se usa swap) allí donde se encuentran las mismas configuraciones en mi sistema:

# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

la solución fue en realidad # echo 1 > /proc/sys/vm/drop_caches :

# cat /proc/sys/vm/drop_caches
0
# echo 1 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
1

ahora está bien:

# top
top - 10:08:58 up 5 days, 18:55,  1 user,  load average: 0.72, 0.95, 0.98
Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3028784 total,   681704 used,  2347080 free,     2916 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.    81924 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     9 root      20   0       0      0      0 S   0.3  0.0  14:10.40 rcuos/0
     1 root      20   0   45652   8124   2888 S   0.0  0.3   1:54.98 init

¿Solución permanente (se encuentra)?

pero como aún no se conoce la razón real, y no encontré ninguna explicación adecuada en la red, esta no es una solución permanente. En realidad, la respuesta seleccionada podría ser la solución permanente. Solo quería agregar esto para futuras referencias, ya que un reinicio (para que sysctl surta efecto) no siempre es posible.

Otra solución podría ser establecer THP en madvice o never (vea el comentario poige en su respuesta , ¿Cómo modifico" / sys / kernel / mm / transparent_hugepage / enabled " y el Manual de MongoDB al que se hace referencia en Inhabilitar páginas grandes transparentes (THP) )

trabajo cron

He configurado el siguiente lote como un trabajo cron como una solución "permanente":

#!/bin/bash


## run as cron, thus no $PATH, thus need to define all absolute paths
top=/usr/bin/top
grep=/bin/grep


top=$($top -bn1 -o \%CPU -u0 | $grep -m2 -E "%CPU|kswapd0")

IFS='
'
set -f

i=0

for line in $top
do
        #echo $i $line

        if ! (( i++ ))
        then
                pos=${line%%%CPU*}
                pos=${#pos}
                #echo $pos
        else
                cpu=${line:(($pos-1)):3}
                cpu=${cpu// /}
                #echo $cpu
        fi

done

[[ -n $cpu ]] && \
(( $cpu >= 90 )) \
&& echo 1 > /proc/sys/vm/drop_caches \
&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \
&& exit 1

exit 0

invocado con

# m h  dom mon dow   command
  * *  *   *   *     /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1

16.04 14.04 swap

    
respondido por el Martin Rüegg 20.02.2016 - 10:09

Lea otras preguntas en las etiquetas