Problèmes FreeBSD - lag à cause des vnodes pleins

Posté le Sat 21 March 2020 dans FreeBSD

Introduction

Celà fait plusieurs jours que j'avais des problèmes de temps de réponses web qui augmentaient, qui passaient quasiment en timeout lors de l'exécution des periodics le matin (4h ~ 9h).

Même la console SSH lag.

Ressources bonnes

J'ai vérifié plusieurs points de contrôles :

  • CPU OK (moins de 20 %)
  • memoire RAM OK (8Go libre)
  • Swap 100% libre
  • zpool (ZFS) à 40% rempli
  • Load average < 0.1

Bref, incompréhensible, pourquoi ça lag :(

Commandes

Après plusieurs jours, j'ai essayé plusieurs commandes, et il y a une intéressante qui me donne une bonne piste :

systat

qui me donne :

                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   

                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           idle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root        vnlru  XXX

vnlru

Mais qu'est ce donc que ce vnlru???

Simple, juste à lire la doc : (freebsd handbook - chapitre 10.20)[https://docs.freebsd.org/en/books/faq/]

Un problème de vnodes, intéressant

Donc si je comprends bien, ça sature au niveau de vnodes.

vnodes

Je regarde donc les vnodes.

Voici les commandes pour trouver les vnodes :

root@myserver:/root # sysctl -n vfs.numvnodes
500000
root@myserver:/root # sysctl -n kern.maxvnodes
500000

Ah, donc oui il y a un soucis.

Il y a un script que j'ai trouvé qui permet de faire le calcul tout seul : (https://www.unix-experience.fr/monitoring/freebsd_vnodes/)[https://www.unix-experience.fr/monitoring/freebsd_vnodes/]

On peut donc augmenter la valeur kern.maxvnodes, mais à augmenter petit à petit, tout en surveillant la memoire RAM, car ça va consommer. La commande pour augmenter :

sysctl kern.maxvnodes=600000

Pour le rendre permanent (soit même après un reboot), mettre dans le fichier /etc/sysctl.conf :

kern.maxvnodes=600000

Supervision Zabbix

Maintenant je vais rajouter ces mesures dans l'outil de supervision Zabbix.

Au niveau du serveur, je rajoute un fichier /usr/local/etc/zabbix44/zabbix_agentd.conf.d/sysctl.conf et j'y met dedans :

UserParameter=sysctl.kern.maxvnodes,sysctl -n kern.maxvnodes
UserParameter=sysctl.vfs.numvnodes,sysctl -n vfs.numvnodes

Je relance le servive Zabbix agent.

Ensuite dans Zabbix, je crée un nouveau template FreeBSD sysctl values, puis je crée une nouvelle application FreeBSD sysctl.

Je crée 2 items dans cette application avec les key :

  • sysctl.kern.maxvnodes
  • sysctl.vfs.numvnodes

Pour finir, j'applique le template à mes hosts FreeBSD.

Je rajoute des beaux panels à mon grafana ;)

PS : si on veux des alertes Zabbix, il faudra créer un trigger.