Quão seguro é aumentar o tmpfs para mais do que a memória física?

11

Meu servidor possui 2 GB de RAM e 120 GB de SSD, além de algumas matrizes RAID para armazenamento. O SO é o Debian 8 (Linux 3.16).

Eu tenho um aplicativo intenso do MySQL que possui tmpdir= /run/mysqld, que é tmpfsconfigurado pelo Debian através de /etc/default/tmpfs:

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

Isso costumava ser 20%VM, ou seja, cerca de 384 milhões. Corri contra vários no space left on device, então aumentei para 40%VM, mas mesmo com cerca de 763M, ainda é muito pequeno.

Agora, agora devo adicionar mais RAM, mas, por curiosidade, gostaria de saber os limites aqui.

  • /dev/sdd1é montado com /cerca de 50 GB de espaço livre e é bastante rápido (Samsung 850 EVO SSD)
  • /dev/sdd5 é minha partição swap, é 3.7G (o ID do tipo fdisk é 82)
  • TMPFS_SIZEestá definido como 40%VM, o significado /runé 763M

Agora eu sei que tmpfs podem ser trocados, o que é bom para mim. Quero que o MySQL grave na RAM sempre que possível, mas se precisar de mais memória, posso permitir que o sistema troque-o no SSD.

Então, com minha configuração, posso pressionar /runpara ser:

  • 300 milhões? Sim. Esse foi o padrão.
  • 1,5 GB grande? Sim, tentei, o MySQL usou até 1,3 GB nele e o sistema funcionou como um encanto. Mas isso ainda é menos da metade da memória física + partição swap.
  • 2.5GB grande? Isso é mais do que memória física, mas menos da metade da memória física + minha partição de troca.
  • 4GB grande? Isso caberia firmemente na metade física + troca
  • Mais? gosta de 10GB? ele pode usar espaço livre /para trocar mais?

Eu estou supondo que a regra básica para segurança é TMPFS_SIZEnão ter maior que swap + meia memória física. Posso ir além disso sem aumentar a partição swap?

Além disso, é possível colocar 200%VMem /etc/default/tmpfs? Eu li tmpfs(5)sem saber se posso colocar> 100% nisso.

Por último, devo fazê-lo /etc/fstabe não tocar /etc/default/tmpfs?

(saiba que eu só fiz isso mount -o remount, ainda não reinicializei o servidor)

Editar: para a última pergunta, eu sei que ela pode / pode ser modificada por /etc/fstab(veja a citação abaixo na página de manual), no entanto, eu queria conhecer as melhores práticas, porque nunca toquei em nada /etc/defaultaté agora.

Opções de montagem mais complexas podem ser usadas pela criação de uma entrada adequada no / etc / fstab.

Benoit Duffez
fonte
Pergunta interessante. Eu acho que isso também pode estar muito relacionado à configuração de overcommit de memória.
Phk #
Parece que o tamanho máximo de tmpfs seria físico + swap. Eu já vi isso nos documentos do kernel .
Benoit Duffez 06/01

Respostas:

8

Imaginei que poderia testá-lo, então corri:

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

Funcionou como um encanto:

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

Então eu preenchi um pouco:

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

O sistema ainda está em funcionamento. A disponibilidade da troca caiu, o que prova que foi usada:

queda de disponibilidade de swap

  • 17:10: crie 2,5 GB de arquivos no /run
  • 17:20: remova o arquivo 500M

O swap total é reduzido pela quantia utilizada /run.

Eu testaria 10 GB em uma VM, porque não sei se o kernel recusará a remontagem ou apenas terá um comportamento inesperado.

Ainda estou procurando uma resposta real, mas a maneira pragmática mostrou que funciona.

Benoit Duffez
fonte