¿Qué tan seguro es aumentar tmpfs a algo más que memoria física?

11

Mi servidor tiene 2 GB de RAM y 120 GB de SSD, además de algunas matrices RAID para almacenamiento. El sistema operativo es Debian 8 (Linux 3.16).

Tengo una aplicación MySQL intensa que tiene tmpdir= /run/mysqld, que es tmpfsconfigurada por Debian a través de /etc/default/tmpfs:

# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM

Esto solía ser 20%VM, que es de unos 384 millones. Corrí contra varios no space left on device, así que lo 40%VMaumenté, pero incluso con unos 763M todavía es demasiado pequeño.

Ahora debería agregar más RAM, pero por curiosidad, me gustaría conocer los límites aquí.

  • /dev/sdd1está montado en /tiene aproximadamente 50 GB gratis, y es bastante rápido (Samsung 850 EVO SSD)
  • /dev/sdd5 es mi partición de intercambio, es 3.7G (la identificación del tipo fdisk es 82)
  • TMPFS_SIZEestá establecido en 40%VM, lo que significa /run763M

Ahora sé que tmpfs puede intercambiar, lo cual está bien para mí. Quiero que MySQL escriba en RAM siempre que sea posible, pero si necesita más memoria, puedo permitir que el sistema lo cambie en el SSD.

Entonces, con mi configuración, ¿puedo presionar /runpara ser:

  • 300 millones de grande? Si. Ese fue el defecto.
  • 1.5GB grande? Sí, lo intenté, MySQL usó hasta 1.3GB y el sistema funcionó de maravilla. Pero eso todavía es menos de la mitad de la memoria física + partición de intercambio.
  • 2.5GB grande? Esto es más que memoria física, pero menos de la mitad de la memoria física + mi partición de intercambio.
  • 4 GB de grande? Esto encajaría perfectamente en medio intercambio físico +
  • ¿Más? como 10GB? ¿Puede usar el espacio libre /para intercambiar más?

Supongo que la regla de oro para la seguridad es TMPFS_SIZEno tener más de swap + media memoria física. ¿Puedo ir más allá de esto sin aumentar la partición de intercambio?

Además, es posible poner 200%VMen /etc/default/tmpfs? He leído tmpfs(5)sin saber si puedo poner> 100% en esto.

Por último, ¿debería hacerlo en su /etc/fstablugar y no tocar /etc/default/tmpfs?

(hasta saber que solo lo he hecho mount -o remount, todavía no reinicié el servidor)

Editar: para la última pregunta, sé que puede / puede modificarse /etc/fstab(consulte la cita a continuación de la página del manual), sin embargo, quería saber la mejor práctica, porque nunca he tocado nada /etc/defaulthasta ahora.

Se pueden usar opciones de montaje más complejas mediante la creación de una entrada adecuada en / etc / fstab.

Benoit Duffez
fuente
Interesante pregunta. Supongo que esto también podría estar muy relacionado con la configuración de sobrecompromiso de memoria.
phk
Parece que el tamaño máximo de tmpfs sería físico + intercambio. He visto esto en los documentos del kernel .
Benoit Duffez

Respuestas:

8

Pensé que podría probarlo, así que corrí:

sudo mount -o remount,size=2800M /run

Trabajado como un encanto:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

Entonces lo llené un poco:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

Resultado:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

El sistema aún está en funcionamiento. La disponibilidad de intercambio se redujo, lo que demuestra que se utilizó:

caída de disponibilidad de intercambio

  • 17:10: crea 2.5 GB de archivos en /run
  • 17:20: eliminar el archivo 500M

El intercambio total se reduce en la cantidad tomada por /run.

Probaría 10 GB en una máquina virtual, porque no sé si el núcleo rechazará el remontaje o simplemente tendrá un comportamiento inesperado.

Todavía estoy buscando una respuesta real, pero la forma pragmática mostró que funciona.

Benoit Duffez
fuente