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?echo /proc/*/fd/* | wc -w
Vous le faites mal.
De
man proc
La première valeur si votre chat vous donne exactement ce que vous recherchez après son apparition.
Pour mémoire, je n'ai pas pu obtenir la
lsof
sortie pour la faire correspondre même avec une certaine quantité de fudging mais je suppose que c'est ce que le noyau dit de plus faisant autorité que la liste que vous obtenez delsof
toute façon.la source
[root@ec2- cassandra101 ~]$ time lsof -b -n -w -l -L | stdbuf -i0 -o0 -e0 wc -l 1018065
. Voici ce que dit le fichier-nr:[root@ec2- cassandra101 ~]$ cat /proc/sys/fs/file-nr 2784 0 3093428
. La grande différence (1 000 000+ contre 2784) est due au fait quelsof
toutes les choses auxquelles aucun descripteur de fichier n'est associé sont associées: fichiers de bibliothèque, fichiers exécutables, etc. Donc, si vous n'êtes intéressé que par les descripteurs de fichiers, alorsfile-nr
est le chemin à parcourir, sinon vous avez besoin de lsof ou équivalent.inode-nr
plutôt au même endroit.