En Mac OS X, ¿cómo puedo obtener un recuento preciso del uso de descriptores de archivo?
En Linux, ulimit -n
se puede usar para cambiar o ver el límite en el número de descriptores de archivo para un proceso, y lsof -p nnn | wc -l
parece informar consistentemente el uso real del descriptor de archivo.
Pero en Mac OS X, lsof -p nnn | wc -l
puede devolver un número mayor que el límite. Supongo que esto significa que lsof
está devolviendo más que solo descriptores de archivo, pero no puedo decir qué es qué.
En pocas palabras: ¿Cómo puedo obtener un recuento preciso del uso de descriptores de archivo en Mac OS X?
4 answers
Lsof puede mostrar muchas cosas más allá de los descriptores de archivo, pero la mayor parte de lo que probablemente está inflando su recuento son los frameworks y bibliotecas cargadas para una aplicación. Puede mirar la columna " FD " para ver si una línea es un descriptor de archivo in en cuyo caso es un número, posiblemente seguido de una letra que indica el modo mode o algo más (vea la descripción de la columna FD en la página man de lsof para la lista completa).
Si solo necesita una aproximación aproximada agregando un 'grep-v "txt"' antes de su wc le llevará mucho más cerca de un valor exacto. Si necesita un valor exacto, probablemente necesite juntar una expresión regular para alimentar la salida a través de esos archivadores precisamente por la columna FD.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-28 14:29:08
Me encontré con la necesidad de identificar esto recientemente - el comando que utilicé para contar el total de entradas (así que más que solo manejadores de archivos, pero su relativo por lo tanto imo relevante) es:
lsof | awk '{print $1}' | uniq -c | sort -rn | head
Esto da algo como la siguiente salida (sus aplicaciones más usadas pueden ser diferentes!):
$lsof | awk '{print $1}' | uniq -c | sort -rn | head
3271 com.apple
2978 Google
914 Atom\x20H
505 Skype
476 Microsoft
375 Screenher
304 Finder
292 Dock
277 Atom\x20H
270 Atom\x20H
Normalmente solo necesito ver las 10 entradas principales, pero puedes manipular head
para mostrar tantas líneas como quieras.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-13 17:45:10
Estaba buscando qué proceso tenía muchos descriptores de archivo, así que supongo que algo como
for pid in `ps aux | tail -n +2 | awk '{print $2}'`; do FCOUNT=`lsof -p $pid | grep -v " txt " | wc -l`; echo "PID: $pid $FCOUNT"; done | sort -nk3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-04 06:06:11
Modificé la respuesta de Anders, ahora solo muestra los números fd abiertos de un proceso específico:
FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3
Ejemplo:
$ ./fd-count.sh 5926
PID: 5926 97
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-21 02:03:47