2 votos

vm.swappiness no se aplica a tmpfs, Ubuntu Server 16.04.5

Necesario para algunos el asesoramiento de un experto me ha traído aquí.

Observación: OS bloquea durante el alto consumo de RAM, muy bajo de intercambio de uso (un montón disponible), alta tmpfs de uso.

Mi configuración:

  1. Ubuntu Server 16.04.5 con kernel 4.4.0-131-genérica.
  2. 64 GB de RAM, 200GB partición swap en un 1 TB NVMe SSD.
  3. 64GB tmpfs partición con la siguiente entrada en fstab

    tmpfs  /my-tmp  tmpfs  rw,size=64G,noexec,nosuid,nodev,noatime 0 0
    
  4. siguientes entradas en /etc/sysctl.conf

    vm.overcommit_memory=2
    vm.overcommit_ratio=100
    vm.swappiness=40
    

^ Yo he probado el swappiness valores de 1, 20, 40 y el valor predeterminado de 60, sin mucho éxito.

La instalación es como este para el soporte de múltiples de alto rendimiento de los servicios, que necesitan de alta velocidad temporal del sistema de ficheros de acceso así como grandes cantidades de RAM.

Todo funciona bien hasta que tanto el uso de la RAM y tmpfs de uso están cerca del máximo y el sistema operativo sólo se bloquea (no ssh respuesta, sin capacidad de Ctrl+Alt+F2/3/4, bloq Num no alternar etc.) durante un período prolongado de tiempo (como 20 minutos), y uno de mis procesos se bloquea si eso sucede.

He iniciado la memoria libre y tmpfs uso de un archivo y se dio cuenta que cuando esto sucede, de intercambio de uso es muy baja, probablemente debido a que tmpfs uso no se cuenta con el uso de la RAM, ya que "utiliza" Mem muestra un valor pequeño.

Imagen de uso de la memoria se ve algo como esto cuando el sistema se bloquea

              total        used        free      shared  buff/cache   available
Mem:            62G        1.2G        324M         60G         61G         75M
Swap:          186G        4.0G        182G

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           6.3G  9.1M  6.3G   1% /run
tmpfs            32G   20M   32G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            32G     0   32G   0% /sys/fs/cgroup
tmpfs           8.0G  8.0K  8.0G   1% /tmp
tmpfs            64G   61G  3.4G  95% /my-tmp
tmpfs           6.3G  4.0K  6.3G   1% /run/user/1001

Permítanme prevenir algunos comentarios acerca de hacer mis servicios de forma más eficiente... que ya son. Es sólo un muy muy exigente aplicación. Y pensé que con una gran partición de intercambio, sería ACEPTAR.

Solución de problemas realizados hasta el momento:

  1. Leer tmpfs la documentación del kernel aquí (muchas veces)

http://man7.org/linux/man-pages/man5/tmpfs.5.html

Dice tmpfs puede emplear el espacio de intercambio durante la alta presión de memoria, pero he visto poco o ningún intercambio de datos cuando el sistema se bloquea, en vez de empezar a cambiar.

  1. Leer numerosas páginas de ayuda, incluyendo esta

https://unix.stackexchange.com/questions/271211/do-tmpfs-and-devtmpfs-share-the-same-memory-region/271235#271235

Hipótesis:

Si yo pudiera tmpfs recuento de uso como el uso de memoria, entonces tal vez la vm.el swappiness parámetro entraría en juego antes de que dicho bloqueo situación.

O, si podía establecer independientemente el swappiness de tmpfs, luego de que iba a hacer el truco también.

Otras sugerencias son bienvenidos también.

Gracias por tomarse el tiempo para leer esto.

Editar 2018-10-11 09:00 PDT:

Gracias a todos por sus útiles las respuestas. He intentado varias combinaciones de tamaño de la partición swap y tmpfs tamaño de la partición en el pasado. Cada vez, he observado la misma. tmpfs utiliza toda la RAM, que no es contado como el uso de la RAM (y, por tanto, de la vm.el swappiness no se aplican a él), y causó OS a encerrarse. Si puedo hacer que mi tmpfs partición más pequeña que la ram, digamos 50, luego bloqueos no suceden.

Esto es contrario a la documentación del kernel para ramfs y tmpfs (que es por eso que yo nunca he usado ramfs)

https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt

La línea de fondo es, si el total de memoria virtual en mi sistema (RAM + SWAP) es más grande que el tamaño total de todos los tmpfs particiones en mi sistema, no debe haber ningún OS bloqueos. Esa es la expectativa, a menos que me falta algo. Entiendo que las cosas pueden ralentizar debido a la memoria de intercambio, pero no debe lock-up.

0voto

Jordi Bunster Puntos 3840

Me gustaría probar...

  • reducir el intercambio de 8G

  • reducir tmpfs 32G

  • comentario modificado vm.* sysctl valores:

    # vm.overcommit_memory=2

    # vm.overcommit_ratio=100

    # vm.swappiness=40

  • cambio en /etc/fstab entrada de 32G:

    tmpfs /my-tmp tmpfs rw,size=32G,noexec,nosuid,nodev,noatime 0 0

  • reinicio

  • jugar con el vm.swappiness parámetro
  • nota ninguna mejora o degradación en el rendimiento del sistema

Actualización #1:

La reducción de la tmpfs de 32G 64G parece funcionar. Usted no quiere tmpfs para consumir toda la memoria RAM física.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: