Linux Swap

Tema en 'GNU/Linux' comenzado por Soujiro, 27 de Febrero de 2019.

Watchers:
This thread is being watched by 4 users.
  1. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    Estimados, tengo un problema de swap en algunos servidores. Dichas maquinas tienen 128Gb de ram, de los cuales alrededor de 45Gb estan ocupados permantemente, sin embargo el sistema oeprativo comienza a ocupar el resto como "cache" o "buffers", hasta aqui nada raro. El problema surge sin embargo cuando se come 50Gb o mas en la cache, con lo cual me queda muy poca memoria libre llegando a este estado.

    Código:
    free -m -h
                         total        used        free      shared  buff/cache   available
    Mem:           125G         56G        6.4G        339M         63G         54G
    el "problema" es que si se ejecuta una aplicación "pesada" el sistema en vez de liberar la cache, manda otro proceso a swap dejando la embarrada. El swappines esta seteado en 10 en las maquinas. ¿Alguien tiene alguna idea de como evitar este comportamiento "errado", no se supone que la memoria de la cache debería ser liberada ante la demanda de mas ram, o hay algo que me estoy olvidando?
     
  2. Veemon

    Veemon El Espia que Espia Miembro Regular Reviewer

    Se incorporó:
    15 de Mayo de 2011
    Mensajes:
    1.006
    Me gusta recibidos:
    426
    Puntos de trofeos:
    148
    Parece mas un comportamiento erratico del kernel en la administracion de la memoria, porque es como tu dices, al necesitar mas ram, debe achicar el cache o liberarlo y no pasarlo a la swap .-.
     
  3. Zuljin

    Zuljin Fundador Miembro del Equipo Fundador ADMIN Old School Miembro Regular

    Se incorporó:
    15 de Enero de 2004
    Mensajes:
    7.277
    Me gusta recibidos:
    1.949
    Puntos de trofeos:
    198
    Yo se que lo que te voy a preguntar no ayuda en nada, es para saber si me puede pasar a mi.

    ¿Qué distro y versiones tienes ahí?
     
  4. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    lamentablemente guanobunto server, pasa en versiones 16.04 con kernel 4.4.0-138-generic y 18.04 con kernel 4.15.0-39-generic
     
    A Sago7 le gusta esto.
  5. Harima

    Harima Pegao al tarro REPORTERO Miembro Regular

    Se incorporó:
    15 de Mayo de 2008
    Mensajes:
    2.902
    Me gusta recibidos:
    1.743
    Puntos de trofeos:
    198
    # swapoff -a && swapon -a
     
  6. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    jaja la idea no es "limpiar" a lo bruto, de echo hay varias formas de hacerlo, sino "prevenir" este comportamiento "raro", a lo mejor es lo "normal". Gracias de todas maneras
     
  7. Harima

    Harima Pegao al tarro REPORTERO Miembro Regular

    Se incorporó:
    15 de Mayo de 2008
    Mensajes:
    2.902
    Me gusta recibidos:
    1.743
    Puntos de trofeos:
    198
    Tirate estos comandos para ver si por lo menos esta leyendo bien la config

    #cat /proc/sys/vm/swappiness
    #cat /etc/sysctl.conf | grep vm.swappiness
    #free -mh (aca deben aparecer dos lineas mem: y swap:)
     
  8. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    voy avanzando con el misterio, basicamente son unos rsync + las vms de windows las que se toman la "cache". Una forma de "reproducir" el problema es
    Código:
    find / -type f -exec cat {} >>/dev/null \;
    lo cual deberia llenar la cache con referencias a los archivos del sistema
    Ademas la estrategia por default de linux para hacer swapping es enviar las paginas de memoria mas viejas, afectadas por el valor de swapinnes vs la cache.
    Resumiendo pareciera ser que mi proceso que lleva mil años en "ejecución" tiene paginas muy viejas, ergo aun con un valor de swappiness de 10
    Código:
    cat /proc/sys/vm/swappiness
    10
    
    pierde ante la cache mas reciente, el problema es que el proceso es la base de datos, y en realidad al entrar en swap se va a la B el rendimiento de la misma.
    ¿Como carajos desactivo el swap para un proceso?
     
  9. Harima

    Harima Pegao al tarro REPORTERO Miembro Regular

    Se incorporó:
    15 de Mayo de 2008
    Mensajes:
    2.902
    Me gusta recibidos:
    1.743
    Puntos de trofeos:
    198
    sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"
     
  10. VittokoX

    VittokoX GΣΣK REPORTERO Old School Miembro Regular

    Se incorporó:
    1 de Octubre de 2007
    Mensajes:
    4.679
    Me gusta recibidos:
    1.375
    Puntos de trofeos:
    198
    Venia a decir lo mismo, verifica la swappiness
     
    A Kitsune le gusta esto.
  11. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    pero si les puse la salida del swappiness ciegos

    cat /proc/sys/vm/swappiness
    10

    y el archivo del sysctl.conf tiene el vm.swappiness=10

    respecto a pegarle un garrote para que se "arregle" y suelte la cache es facil, pero el "problema" es sacar el mysql de la swap sin que explote o derechamente evitar que el mysql se valla a swap. La idea es que el puto SO haga la pega que le corresponde como la gente y libere la cache antes de mandar un proceso en ejecucion a swap, por mucho que lleve mil años en ejecucion.
     
  12. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    Definitivamente el algoritmo de swap por defecto es el que me trolea, aun con swappines 1. Dado que la base de datos corre en un container probare con el parametro --memory-swappiness 0
    mientras tanto el siguiente procedimiento le servira a quien tenga problemas:
    primero, mandar al espacio la cache de archivos del SO
    Código:
    sync; echo 1 > /proc/sys/vm/drop_caches
    luego ejecutar este scrip de perl para "prepar" la descativacion/activacion de swap, el cual es un proceso ridículamente lento
    Código:
    https://gist.github.com/Someguy123/b221986a279e1dff5f1c139562f9ca73
    Finalmente apagar y prender la swap
    Código:
    swapoff -a && swapon -a
    Con eso sacar las cosas de swap deberia ser "rapido"
     
  13. Soujiro

    Soujiro Pro Miembro Regular

    Se incorporó:
    14 de Enero de 2008
    Mensajes:
    576
    Me gusta recibidos:
    282
    Puntos de trofeos:
    168
    Finalmente creo que pille la solucion a mi problema, setear esta variable en /etc/sysctl.conf

    vm.vfs_cache_pressure=1000
     
    A Harima y Zuljin les gusta esto.

Comparte esta página

Share
Cargando...