Tengo un proceso de Java (Glassfish) que está filtrando descriptores de archivos. Sé esto porque recibo la útil java.io.IOException: Too many open files
excepción. Puedo mirar /proc/PID#/fd
y ver todos los descriptores de archivos abiertos. Cuando uso lsof obtengo una gran cantidad de entradas como esta:
java 18510 root 8811u calcetín 0,4 1576079 no puede identificar el protocolo
java 18510 root 8812u calcetín 0,4 1576111 no puede identificar el protocolo
java 18510 root 8813u calcetín 0,4 1576150 no puede identificar el protocolo
Veo 12 nuevos creados por minuto. ¿Qué opciones puedo usar en lsof o qué otras herramientas están disponibles para ayudarme a rastrear los descriptores de archivos de socket donde no se puede identificar el protocolo?
fuente
Respuestas:
para ver los 20 mejores manejadores de archivos usando procesos:
la salida está en el formato de archivo, número de identificadores, pid, cmndline para el proceso
salida de ejemplo
fuente
Familiarícese con el comando strace. Monitorea llamadas del sistema. Recientemente lo usé para rastrear fugas en el descriptor de archivo que causaban que nuestro demonio snmpd se bloqueara repetidamente. Lleva un tiempo acostumbrarse, pero es una herramienta poderosa.
Puede usar strace para adjuntar a un proceso en ejecución (no olvide el indicador -f para seguir los procesos secundarios).
fuente
¿Qué estás tratando de localizar exactamente? ¿Las direcciones IP remotas asociadas con los FD filtrados, el código defectuoso u otra cosa?
Como ya ha identificado que hay una fuga, ponerse en contacto con los ingenieros responsables de este proceso de Java parece ser un próximo paso razonable.
fuente
can't identify protocol
no les da a los ingenieros mucho para correr. ¿Hay herramientas u opciones en lsof que no veo qué debo usar? El problema no ocurre en el entorno de prueba y solo comenzó en este entorno después de una migración de gabinete. El mismo código no tuvo problemas antes de la migración y cuando la aplicación no está implementada, Glassfish todavía se filtra por sí solo. Mi mejor conjetura es que algo se rompió desde una perspectiva de redes y los enchufes están tratando de inicializarse pero no pueden y luego se cuelgan y se quedan.