Est-il sûr d'augmenter les tmpfs à plus que la mémoire physique?

11

Mon serveur a 2 Go de RAM et 120 Go de SSD, ainsi que des matrices RAID pour le stockage. Le système d'exploitation est Debian 8 (Linux 3.16).

J'ai une application MySQL intense qui a tmpdir= /run/mysqld, qui est tmpfsconfigurée par Debian via /etc/default/tmpfs:

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

C'était le cas 20%VM, ce qui représente environ 384 millions de dollars. J'ai couru contre plusieurs no space left on device, donc je l'ai augmenté à 40%VM, mais même avec environ 763M, il est encore trop petit.

Maintenant, je dois maintenant ajouter plus de RAM, mais par curiosité, j'aimerais connaître les limites ici.

  • /dev/sdd1est monté sur /a environ 50 Go d'espace libre et est assez rapide (Samsung 850 EVO SSD)
  • /dev/sdd5 est ma partition de swap, elle est de 3,7 G (l'ID de type fdisk est 82)
  • TMPFS_SIZEest défini sur 40%VM, ce qui signifie /run763M

Maintenant, je sais que tmpfs peut échanger, ce qui me convient. Je veux que MySQL écrive dans la RAM autant que possible, mais s'il a besoin de plus de mémoire, je peux autoriser le système à l'échanger sur le SSD.

Donc avec ma configuration, puis-je pousser /runà être:

  • 300M gros? Oui. C'était le défaut.
  • 1,5 Go gros? Oui, essayé, MySQL a utilisé jusqu'à 1,3 Go et le système a fonctionné comme un charme. Mais c'est toujours moins de la moitié de la mémoire physique + partition de swap.
  • 2,5 Go gros? C'est plus que de la mémoire physique, mais moins de la moitié de la mémoire physique + ma partition de swap.
  • 4 Go gros? Cela s'inscrirait étroitement dans la moitié physique + swap
  • Plus? comme 10 Go? peut-il utiliser de l'espace libre /pour échanger davantage?

Je suppose que la règle de base pour la sécurité est de ne TMPFS_SIZEpas avoir plus de swap + la moitié de la mémoire physique. Puis-je aller au-delà sans augmenter la partition de swap?

Aussi, est - il possible de mettre 200%VMen /etc/default/tmpfs? J'ai lu tmpfs(5)sans savoir si je peux mettre> 100% à ce sujet.

Enfin, dois-je le faire à la /etc/fstabplace et ne pas toucher /etc/default/tmpfs?

(jusqu'à savoir que je ne l'ai fait qu'avec mount -o remount, je n'ai pas encore redémarré le serveur)

Edit: pour la dernière question, je sais qu'elle peut / peut être modifiée par /etc/fstab(voir la citation ci-dessous de la page de manuel), mais je voulais connaître la meilleure pratique, car je n'ai jamais rien touché /etc/defaultjusqu'à présent.

Des options de montage plus complexes peuvent être utilisées par la création d'une entrée appropriée dans / etc / fstab.

Benoit Duffez
la source
Question interessante. Je suppose que cela pourrait également être très lié au paramètre de surcharge de la mémoire.
phk
Il semble que la taille maximale des tmpfs soit physique + swap. J'ai vu cela dans les documents du noyau .
Benoit Duffez

Réponses:

8

J'ai pensé que je pouvais juste le tester, alors j'ai couru:

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

Fonctionné comme un charme:

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

Je l'ai donc un peu rempli:

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

Résultat:

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

Le système est toujours opérationnel. La disponibilité des swaps a chuté, ce qui prouve qu'elle a été utilisée:

échange de disponibilité baisse

  • 17:10: créez 2,5 Go de fichiers dans /run
  • 17h20: supprimer le fichier 500M

Le swap total est réduit du montant pris par /run.

Je testerais 10 Go sur une machine virtuelle, car je ne sais pas si le noyau refusera le remontage ou aura simplement un comportement inattendu.

Je cherche toujours une réponse réelle, mais la manière pragmatique a montré que cela fonctionne.

Benoit Duffez
la source