FreeBSD vnodes

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.

Sonde

#! /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

Résolution du problème

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