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.