Saltar al contenido

kswapd0 consume mucha CPU

Nuestro team de trabajo ha estado horas investigando para darle resolución a tus dudas, te ofrecemos la respuestas y deseamos que sea de gran ayuda.

Solución:

El proceso kswapd0 es el proceso que gestiona la memoria virtual. tu maquina deberían tenga RAM, SWAP y EXT4 en su HDD/SSD. El ext4 es donde se almacena todo, y siempre es más lento acceder que 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 4 GB de RAM, que en condiciones normales es suficiente. Sin embargo, cuando juegas, es posible que te quedes sin espacio en la memoria RAM, que es donde entra SWAP.

SWAP es una RAM falsa ubicada en su HDD/SSD al lado de su EXT4. Es más rápido de acceder que EXT4, pero es mucho más lento que la RAM real. Cuando se queda sin memoria, kswapd0 mueve los programas que no está usando o que no usa tanto como otros programas al SWAP, lo que provoca un retraso extremo en esos procesos. Si su juego necesitara 5 GB de RAM, 1 GB como mínimo 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, todo al mismo tiempo. ¿Cómo resolver este problema?

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

    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 quede 0% de RAM, SWAP comenzará a tomar datos). También puede simplemente editar /etc/sysctl.conf a su gusto en lugar de agregar este comando al final cada vez que use gedit o nano o lo que sea, sin embargo, asegúrese de sudo, este archivo es propiedad de la raíz. ¡Reinicia y listo!

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

Eso es lo mejor que puedes hacer. Otros pueden decir que deshabilite el intercambio por completo, pero eso es peligroso y NO lo recomendaría. Eso puede hacer que los sistemas enteros se congelen si hay una pérdida de memoria o si se están ejecutando demasiadas aplicaciones. Solo tenga en cuenta que el SWAP es un mecanismo de seguridad para la RAM. Definitivamente no es tan rápido o eficiente como la RAM, ¡pero es mejor que el Pagefile de Windows! (que cumple el mismo propósito)

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

kswapd0 se ejecuta al 99,9% de una CPU, pero en realidad no se intercambia en absoluto

A mí me sucede a veces en Ubuntu 14.04 con kernel 3.19.0-50-generic (y anterior) ejecutándose en una máquina virtual VMware. No tengo idea de qué lo hizo aparecer, pero viene 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 a menudo usa el 100% de la CPU cuando se usa el intercambio) allí donde la misma configuración 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 en realidad se estaba ejecutando echo 1 > /proc/sys/vm/drop_caches como usuario raíz:

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

O, como lo señaló theTuxRacer (¡gracias!), use el siguiente comando en caso de que no haya iniciado sesión como root:

echo 1 | sudo tee /proc/sys/vm/drop_caches

ahora esta 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 (por encontrar)?

pero dado que 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 referencia futura, ya que no siempre es posible reiniciar (para que sysctl surta efecto).

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

trabajo cron

Configuré el siguiente lote como un trabajo cron como una solución "permanente":

#!/bin/bash
# Rev 2: Use ps instead of top

## run as cron, thus no $PATH, thus need to define all absolute paths
cpu=$(/usr/bin/printf %.0f $(/bin/ps -o pcpu= -C kswapd0))

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

exit 0

invocado desde [email protected]:~# crontab -e con

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

Nota: El script de trabajo cron anterior se ha adaptado para incluir la sugerencia de Fredrik Erlandsson: una forma mucho más simple y eficiente de determinar el uso de CPU de kswapd0. ¡Gracias!

16.0414.04intercambiar

Recuerda que tienes la capacidad de explicar si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.