Swatch du serveur Linux avant que la mémoire ne soit complètement remplie

Je m'attendais à ce que toute la RAM soit utilisée avant l'échange de l'expérience, mais j'ai ce résultat étrange à l' htop :

Capture d'écran de htop s'exécutant sur le serveur.

Cela signifie que sur mon serveur avec 24 Go de RAM, mon logiciel a échangé 1 Go de mémoire sur disque, quand ils utilisent uniquement un total de 23 Go de mémoire.

Je ne m'attendais pas à échanger en utilisant moins de mémoire que ce qui est disponible sur le matériel … Pourquoi le serveur fait-il cela?

Ce comportement est contrôlé par un paramètre de noyau appelé vm.swappiness , qui peut être défini sur une plage de 0 à 100. La valeur par défaut de 60 fera que le système échangera quelque peu avant que la mémoire physique soit complètement remplie, ce qui contribue à maintenir les performances sous la mémoire Pression, tout en ne changeant pas autant que pour dégrader les performances en raison de la détresse .

Cela peut être désactivé en réglant le swappiness sur 0, auquel cas le système ne sera pas échangé sauf si cela est absolument nécessaire. Cela peut avoir du sens si vous avez généralement beaucoup de RAM gratuite. Cependant, les performances vont tomber d'une falaise au moment où la mémoire physique de votre système est complètement remplie car le système est soudainement contraint d'échanger à un moment intempestif lorsqu'une application a besoin de mémoire, plutôt que par avance, et n'est pas recommandé dans votre cas en tant que serveur Est proche de plein.

Il est probablement préférable pour vous de régler le swappiness à une valeur faible (mais non nulle) comme 10, ce qui réduira les échanges inutiles sans attendre le dernier moment pour libérer de la RAM lorsqu'un programme l'a besoin. Le meilleur réglage dépend de votre environnement, alors expérimentez différents paramètres jusqu'à ce que vous obteniez les meilleurs résultats.

Pour modifier le paramètre de balayage, écrivez la valeur souhaitée dans /proc/sys/vm/swappiness utilisant echo tant que root. Pour effectuer des modifications permanentes, ajoutez une ligne vm.swappiness à /etc/sysctl.conf (remplacez 10 par votre valeur souhaitée au besoin):

 vm.swappiness = 10 

Les systèmes d'exploitation n'attendront pas la dernière seconde d'échange de mémoire pour des raisons de performance. La mise en œuvre dépendra des systèmes d'exploitation que vous utilisez, mais la plupart des systèmes d'exploitation modernes échangeront bien avant que la mémoire physique ne soit pleine. L'échange se produit habituellement lorsque le système ne fonctionne pas complètement, alors quand plus de travail arrive, il dispose d'une RAM suffisante et est prêt à gérer le travail.

Pour les systèmes de bureau, certains systèmes d'exploitation (par exemple, Windows) préchargent même les logiciels que vous utilisez souvent dans la mémoire et mettez des données qui ne sont pas utilisées actuellement sur le disque dur. Cela ne fonctionne pas bien lorsque le système est récemment installé, mais deviendra mieux et mieux que vous l'utilisez.