Nous exécutons un cluster de recherche élastique à 4 nœuds/machine sur 12 cœurs, 96 Go de RAM, 4 machines à disque rotatif. En fonctionnement normal, la plupart de l'utilisation du processeur est le fait de l'utilisateur et tourne autour de 5 à 10 %. Tous les quelques jours, l'utilisation du processeur de l'une des machines atteint 80-100% et est entièrement le fait de l'utilisateur et du système - l'attente io diminue réellement. Nous avons d'abord pensé qu'il s'agissait d'un problème spécifique à elasticsearch, mais après un débogage approfondi, il semble que ce ne soit pas le cas :
- l'utilisation élevée du processeur survit à un redémarrage du processus du nœud elasticsearch
- les threads d'elasticsearch se comportent tous normalement, les choses prennent juste 10x plus de temps.
- les opérations sans elasticsearch (collecte de gc) prennent également 10x plus de temps, mais l'activité du tas est normale.
Si nous arrêtons le processus pendant environ une heure, puis redémarrons uniquement le processus (pas la machine), le problème disparaît et tout fonctionne bien pendant quelques jours.
Nous avons également remarqué que pendant ce problème, les tests de copie de disque sont très lents. Lorsque le processus est en marche mais inactif (pas d'indexation ni de recherche de données) ou peu après son arrêt, la copie d'un fichier de 1 Go via dd se fait à environ 18 Mo/s sur la machine problématique, mais à 490 Mo/s lorsqu'elle est saine. Il est intéressant de noter qu'à l'aide de dstat, nous avons remarqué que la copie lente prenait environ 25 secondes avant d'effectuer des entrées/sorties, puis 30 secondes supplémentaires pour se terminer. La sortie de strace ne semble pas être très différente.
Une idée des autres tests que nous pourrions effectuer ?