Eseguiamo un cluster Apache Cassandra in cui ogni host ha alcune centinaia di migliaia di file aperti in qualsiasi momento.
Vorremmo essere in grado di ottenere un conteggio di file aperti a intervalli periodici e di inserire questo numero in grafite , ma quando corriamo lsof
sotto collectd
, ci vogliono alcuni minuti per completare e masticare una quantità eccessiva di CPU nel frattempo .
Mi chiedo se esiste un modo alternativo e più amichevole per ottenere gli stessi dati che lsof fornisce, o anche un modo di far funzionare lsof che non si consuma nella CPU in modo così evidente? (Anche se presumo che questo ultimo metodo richiederebbe molto più tempo per il completamento di quanto non faccia attualmente ... non è l'ideale).
Forse il kernel mantiene qualche variabile da qualche parte che contiene il numero di file aperti? Pensiero speranzoso?
Aggiornare:
In risposta a una delle risposte, stiamo già utilizzando i flag -b
e -n
. Ecco il comando completo come ho in esecuzione sotto collectd
:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
/ proc / {{number}} / fdinfo / 5 ': nessun file o directory simile - Q @ Benoît come posso evitarlo?