Un noeud virtuel est la représentation interne d’un fichier ou d’un répertoire dans FreeBSD (Source). Sur des systèmes comportant énormément de fichiers qui sont sollicités il peut être intéressant de monitorer la valeur des vnodes afin de vérifier qu’elle ne dépasse pas la limite du noyau FreeBSD.
#! /bin/sh
# states
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
CUR_VNODE_NB=$(/sbin/sysctl vfs.numvnodes|awk '{print $2}')
MAX_VNODE_NB=$(/sbin/sysctl kern.maxvnodes|awk '{print $2}')
VNODE_PCT=$(echo "$CUR_VNODE_NB*100/$MAX_VNODE_NB"|/usr/bin/bc)
if [ "$VNODE_PCT" -gt 90 ];
then
echo "vfs.numvnodes > kern.maxvnodes * 0.9 ($CUR_VNODE_NB/$MAX_VNODE_NB) ! Please increase kern.maxvnodes to support charge"
return $STATE_CRITICAL
elif [ "$VNODE_PCT" -gt 80 ];
then
echo "vfs.numvnodes > kern.maxvnodes * 0.8 ($CUR_VNODE_NB/$MAX_VNODE_NB) ! Be careful the server is charged"
return $STATE_WARNING
else
echo "vfs.numvnodes are correct. ($CUR_VNODE_NB/$MAX_VNODE_NB)"
return $STATE_OK
fi
Afin de résoudre le problème il suffit d’augmenter le nombre de vnodes au niveau kernel (assurez vous d’avoir suffisament de RAM disponible avec top):
sysctl kern.maxvnodes=200000
Afin de rendre ce changement permanent ajouter la configuration dans /etc/sysctl.conf