Nous exécutons un cluster Apache Cassandra où chaque hôte a quelques centaines de milliers de fichiers ouverts à tout moment.
Nous aimerions être en mesure d'obtenir un nombre de fichiers ouverts à intervalles réguliers et d'introduire ce nombre dans le graphite , mais lorsque nous courons lsof
sous collectd
, cela finit par prendre quelques minutes pour terminer et mâcher une quantité excessive de CPU en attendant .
Je me demande s'il existe un moyen alternatif et plus convivial d'obtenir les mêmes données que lsof fournit, ou même un moyen d'exécuter lsof qui ne mangera pas dans le CPU de manière aussi sensible? (Bien que je suppose que cette dernière méthode prendrait probablement beaucoup plus de temps qu'elle ne le fait actuellement ... pas idéal).
Peut-être que le noyau maintient une variable quelque part qui contient le nombre de fichiers ouverts? Vœu pieux?
Mise à jour:
En réponse à l'une des réponses, nous utilisons déjà les indicateurs -b
et -n
. Voici la commande complète telle que je l'ai sous collectd
:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
/ proc / {{numéro}} / fdinfo / 5 ': Aucun fichier ou répertoire de ce type - Q @ Benoît comment puis-je éviter cela?