Voici mon problème, Visibile dans un graphique Munin:
Mes inodes d'occasion/ouverts sont "soudainement" en augmentation constante.
Existe-t-il un moyen de déterminer quel processus maintient les inodes les plus actuellement ouverts? J'ai utilisé l'approche de https://unix.stackexchange.com/questions/117093/finind-where-inodes-Are-being-uused et a trouvé et nettoyé certains dossiers avec des mails et des journaux que je pourrais obtenir débarrasser de ... Néanmoins, si les inodes sont ouverts, il doit y avoir un processus en les gardant en cours d'utilisation, non? Ce n'est peut-être pas nécessairement le dossier avec la plupart des fichiers où l'augmentation provient - ou je me trompe là-bas?
Donc, j'aimerais voir qui les empêche d'ouvrir et de suivre l'utilisation pour voir où l'augmentation vient de
Mise à jour
Basé sur le script d'Andrew, j'ai créé une version qui montre également le nom du processus. Comme je dispose des processus Nginx/Apache en cours d'exécution pouvant respecter, j'aimerais voir les résultats sur le nom du processus.
for dir in /proc/*/fd;
do
echo -n "$dir ";
pid=`expr "$dir" : '\/proc\/\(.*\)\/.*'`; # extract the pid
pname=`ps -p $pid -o comm=`; # grab process name
echo -n "$pname ";
ls $dir 2>/dev/null | wc -l;
done | sort -n -k 3
Sortie d'échantillon:
/proc/4612/fd sshd 49
/proc/46470/fd node 60
/proc/5655/fd nginx 66
/proc/6656/fd nginx 76
/proc/7654/fd nginx 81
/proc/8578/fd dovecot 107
/proc/9657/fd nginx 117
/proc/3495/fd Java 146
/proc/4785/fd mysqld 382
Donc, le prochain essai enregistre la distribution au fil du temps pour voir quels changements et son corrélation avec le nombre de/proc/sys/fs/inode-nr que Morgan a mentionné
un an plus tard ...
Un peu de temps est passé, voici un nouveau graphique
Et devinez quoi, fin septembre est le point où un lecteur défectueux a été remplacé. Il semble donc que tout le désordre a été généré par une erreur de disque. Néanmoins, les scripts sont toujours utiles!
Je pense que le problème ici est, en partie, ce que Munin signifie par "Open Inodes". Mon installation par défaut de Munin a deux plugins pour obtenir le nombre d'inodes alloués:
"/ etc/munin/plugins/open_inodes" qui obtient la métrique d'inode à partir de "/ proc/sys/fs/inode-nr"
et
"/ etc/munin/plugins/df_inode" qui obtient la métrique à partir de la sortie de "DF -I".
Ces numéros sont un reflet de fichiers existants non le nombre de fichiers/inodes utilisés par tous les processus du système.
Par exemple, ce script crée dix fichiers et après la fin, nous pouvons voir l'augmentation de l'allocation d'Inode dans "DF -I" et Inode-NR.
#!/usr/bin/python
f0 = open("foo0", "w")
f1 = open("foo1", "w")
f2 = open("foo2", "w")
f3 = open("foo3", "w")
f4 = open("foo4", "w")
f5 = open("foo5", "w")
f6 = open("foo6", "w")
f7 = open("foo7", "w")
f8 = open("foo8", "w")
f9 = open("foo9", "w")
Toutefois, si je modifie cela pour empêcher le programme de se terminer (et que les fichiers existent déjà) ... Les fichiers sont laissés "ouverts" et "en utilisation" par le processus.
#!/usr/bin/python
import time
f0 = open("foo0", "w")
f1 = open("foo1", "w")
f2 = open("foo2", "w")
f3 = open("foo3", "w")
f4 = open("foo4", "w")
f5 = open("foo5", "w")
f6 = open("foo6", "w")
f7 = open("foo7", "w")
f8 = open("foo8", "w")
f9 = open("foo9", "w")
time.sleep(600)
que nous pouvons voir reflétés dans la sortie de "LSOF -P PID"
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
open_some 6602 morgan 3w REG 254,1 0 262198 /home/morgan/src/foo0
open_some 6602 morgan 4w REG 254,1 0 262273 /home/morgan/src/foo1
open_some 6602 morgan 5w REG 254,1 0 262284 /home/morgan/src/foo2
open_some 6602 morgan 6w REG 254,1 0 262287 /home/morgan/src/foo3
open_some 6602 morgan 7w REG 254,1 0 262289 /home/morgan/src/foo4
open_some 6602 morgan 8w REG 254,1 0 262301 /home/morgan/src/foo5
open_some 6602 morgan 9w REG 254,1 0 262302 /home/morgan/src/foo6
open_some 6602 morgan 10w REG 254,1 0 262309 /home/morgan/src/foo7
open_some 6602 morgan 11w REG 254,1 0 262457 /home/morgan/src/foo8
open_some 6602 morgan 12w REG 254,1 0 268672 /home/morgan/src/foo9
Mais je peux exécuter ce script "Ouvrir et rester ouvert" autant de fois que je veux, et cela ne changera pas les chiffres dans df/inode-nr.
Donc, en bref, Munin signale le nombre d'inodes alloués et non le nombre de toutes les inodes utilisées par tous les processus. Si, après avoir supprimé un tas de fichiers, le graphila Munin ne reflète pas les inodes libres, il peut être simplement que le graphique n'a pas ré-généré ou, dans l'exemple indiqué, l'échelle de temps du graphique étant trop longue pour refléter un changement soudain.