Pour ma part, j'évite au maximum de mettre du swap, sauf à ne pas avoir
suffisament de mémoire physique.

En cas de surconsommation, je préfère avoir un service tué par oom qu'un
serveur inaccessible

M'enfin

On 29/09/2014 21:45, Jean Weisbuch wrote:
> Tout dépends de l'utilisation du serveur et de sa quantité de mémoire
> mais en manière générale il est plus prudent d'avoir de la swap et le
> swapiness très bas ou à 0 histoire d'éviter d'avoir des soucis en cas de
> dépassement exceptionnel en ayant des OOM kills qui sont rarement
> idéales pour l'applicatif (et ses utilisateurs).
> 
> Il n'est pas toujours possible (ou pas forcément de manière précise et
> simple) de limiter pour chaque démon/script la mémoire utilisée, surtout
> si le serveur ne sers pas qu'à faire tourner qu'un gros service, il y à
> aussi la possibilité qu'après une mise à jour ou modification,
> l'utilisation et la gestion de la mémoire ne soit pas la même ou
> qu'un/des nouveau(x) cache(s) aient fait leur apparition.
> 
> Si l'on fais tourner par exemple un serveur MySQL/MariaDB et qu'on à
> configuré tout les caches et buffers pour utiliser idéalement la RAM en
> utilisation normale, il y à quand même des buffers qui seront alloués
> dynamiquement à chaque requête et parfois l'utilisation de tables
> temporaires en mémoire qui elles aussi peuvent avoir des tailles très
> variables ; la gestion de la mémoire et du cache est également
> différente en fonction du moteur de stockage utilisé et de l'utilisation
> ou non de directio/O_DIRECT (bypass du cache de fichiers par le système)
> pour InnoDB et TokuDB par exemple.
> Une solution très utilisée est également de mettre en tmpfs le
> répertoire temporaire de MySQL/MariaDB qui contiendra les tables
> temporaires ne pouvant être maintenue en mémoire par le service lui
> même, certaines opérations ALTER nécessitant de recréer la table ou les
> index peuvent créer de tels fichiers qui en fonction de la table
> d'origine risqueront d'être plus gros que la taille de la mémoire libre
> si le serveur est déjà configuré pour utiliser idéalement la mémoire en
> utilisation normale, il faut donc configurer le tmpfs pour pouvoir faire
> de l'over-provisionning et se retrouver à utiliser la swap dans ces cas
> de figure car il n'est pas possible de modifier le/les répertoire(s)
> temporaire(s) sans redémarrer le démon, ce qui n'est pas forcément idéal
> et nécessite une planification supplémentaire à chaque opération de ce type.
> Autre petit exemple de mise en swap qui peux surprendre : si
> MySQL/MariaDB 5.5 tourne sur un serveur multi-socket à architecture NUMA
> sans interleaving d'activé, il ne pourra pas utiliser plus que la
> quantité de mémoire disponible sur un CPU pour le buffer pool d'InnoDB,
> il swappera le reste (sauf si innodb_buffer_pool_instances est supérieur
> à 1 (qui est sa valeur par défaut sur 5.5)).
> 
> Si en plus il y à plus d'un serveur SQL (ou autre démon(s) et scripts
> gourmands) tournant sur la machine et n'utilisant pas forcément la
> mémoire au même moment de la journée ou par burst, il sera en effet
> possible de limiter à chacun sa quantité de mémoire pour que si tous
> utilisent à 100% leurs ressources allouées, la mémoire du serveur ne
> soit pas saturée mais au final en limitant drastiquement la mémoire
> allouable par chacun en cas de burst et limitant plus qu'autre chose les
> performances.
> 
> Quant aux serveurs à genoux dès que ça swap, tant que le swapiness est
> bas et que la mise en swap est exceptionnelle, cela ne ralentira
> sensiblement qu'au moment ou le seuil est dépassé mais pas forcément
> plus qu'avoir à relancer complétement le démon en ayant les clients qui
> se reconnectent tous d'un coup après un timeout, un recovery (et
> potentiellement des tables corrompues à réparer) à effectuer et les
> caches à re-provisionner.
> 
> A savoir qu'il est simple et rapide de flusher la swap si la mémoire est
> de nouveau disponible.
> 
> En conclusion, je pense qu'il est toujours plus prudent d'avoir un peu
> de swap qui ne sera idéalement pas utilisée mais qui servira de
> sécurité, je n'ai jamais eu de soucis avec cette approche et la gestion
> du swap est bonne sur les kernels récents.
> 
> 
> ps: à propos de NUMA et PostgreSQL, je ne connais pas assez PostgreSQL
> pour être affirmatif mais il est peut être possible que le cache d'une
> seule table ne soit fait que par un seul processus à la fois et si la
> table en mémoire prends plus que la mémoire libre sur le processeur sur
> lequel il tourne, de se retrouver à swapper.
> 
> Le 29/09/2014 17:25, Aurélien a écrit :
>> 2014-09-29 17:03 GMT+02:00 Jean Weisbuch <j...@plusquenet.net
>> <mailto:j...@plusquenet.net>>:
>>
>>     Désactiver complètement le swap est rarement une bonne idée, il
>>     est plus prudent d'en laisser un peu avec le swapiness très bas
>>     (ou à 0).
>>
>>
>> Bonjour,
>>
>> L'ayant en production et n'ayant jamais rencontré de problématique
>> dans mes utilisations (principalement des bases de données et du
>> caching HTTP), as-tu des exemples où, malgré une utilisation calibrée
>> du serveur (calcul précis des utilisations des programmes installés,
>> pas de multi-utilisateur, un seul jeu de services par serveur, etc),
>> cela pose problème ? Sous quelle forme cela se manifeste-t'il ?
>>  
>> Merci !
>> Cordialement,
>> -- 
>> Aurélien Guillaume
> 
> 
> _______________________________________________
> Liste de diffusion du FRsAG
> http://www.frsag.org/
> 


-- 
"UNIX was not designed to stop its users from doing stupid things, as
that would also stop them from doing clever things." – Doug Gwyn
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à