He revisado las otras preguntas similares en SO, pero parecen ser causadas por otros problemas.JDK 1.7: "Demasiados archivos abiertos" debido a semáforos POSIX?
Primero me aseguré de cerrar juiciosamente todos mis identificadores de archivo, y luego usé lsof -p <pid of java>
para ver mi lista de archivos.
Se mantiene bastante constante a lo largo de mi tiempo de ejecución, pero luego periódicamente voy a tener unos 10.000 indicaciones que figuran en lsof
como esto:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
java 36809 smm *235r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *236r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *237r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *238r PSXSEM 0t0 kcms00008FC901624000
java 36809 smm *239r PSXSEM 0t0 kcms00008FC901624000
La página del manual dice PSXSEM
tipo es un semáforo POSIX. ¿Alguna pista para qué JDK usa los semáforos POSIX? Por cierto, la aplicación es una aplicación de línea de comando de un solo hilo en este momento.
fondo potencialmente útiles: Primero me di cuenta esto después de actualizar a JDK 1.7 en Mac OS X 10.7.3:
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
Actualización: repointing $JAVA_HOME
en JDK 1.6 Parece que hay una solución para el problema.
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3635)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
¿Qué es JDK 1.7 doing differently?
Probaría un generador de perfiles de Java normal, como YourTrack o incluso solo VisualVM para ver si se puede correlacionar la creación de los semáforos 10K con la creación de un gran número de objetos de la biblioteca de Java. –
Todavía veo este problema, pero no estoy usando ImageIO (al menos no directamente). Las reparaciones solo hacen que aumente el número de semáforos, hasta que obtengo un: 2012-05-09 16: 30: 12.856 java [14407: 3d87] La interfaz de usuario persistente no puede abrir el archivo de archivo: // localhost/Users/juancn/Library /Saved%20Application%20State/net.java.openjdk.cmd.savedState/window_1.data: Demasiados archivos abiertos (24) – juancn