Ejecutamos un clúster Apache Cassandra donde cada host tiene unos cientos de miles de archivos abiertos en un momento dado.
Nos gustaría ser capaz de obtener un recuento de archivos abiertos a intervalos periódicos y alimentar este número en el grafito , pero cuando nos encontramos lsof
bajo collectd
, acaba de tomar unos minutos para completar y masticando una cantidad excesiva de CPU en el ínterin .
Me pregunto si hay un medio alternativo y más amigable para obtener los mismos datos que proporciona lsof, o incluso una forma de ejecutar lsof que no se comerá en la CPU tan notablemente. (Aunque supongo que este último método probablemente tardaría mucho más en completarse de lo que lo hace actualmente ... no es lo ideal).
¿Quizás el núcleo mantiene alguna variable en algún lugar que contiene el número de archivos abiertos? Ilusiones?
Actualizar:
En respuesta a una de las respuestas, ya estamos usando las banderas -b
y -n
. Aquí está el comando completo ya que lo tengo ejecutándose 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 ': No existe tal archivo o directorio - Q @ Benoît ¿cómo puedo evitar eso?