Ho esaminato altre domande simili su SO, ma sembrano essere causate da altri problemi.JDK 1.7: "Troppi file aperti" a causa dei semafori POSIX?
Per prima cosa mi sono assicurato di chiudere con giudizio tutti i miei handle di file, quindi ho utilizzato lsof -p <pid of java>
per consultare il mio elenco di file.
rimane abbastanza costante durante tutto il mio tempo di esecuzione, ma poi periodicamente mi metterò circa 10.000 voci elencate in lsof
come questo:
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 pagina man dice PSXSEM
tipo è un POSIX semaforo. Qualche indizio su cosa JDK usa per i semafori POSIX? A proposito, l'app è una app a linea di comando a thread singolo al momento.
potenzialmente utile sfondo: in primo luogo ho notato questo dopo l'aggiornamento a JDK 1.7 su 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)
Aggiornamento: repointing $JAVA_HOME
al JDK 1.6 sembra essere una soluzione per il 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)
Che cosa fa JDK 1.7 in modo diverso?
Vorrei provare un java profiler regolare, come YourTrack o anche solo VisualVM per vedere se è possibile correlare la creazione dei semafori 10K alla creazione di un gran numero di oggetti libreria Java. –
Sto ancora vedendo questo problema, ma non sto usando ImageIO (almeno non direttamente). I ripristini fanno sì che il numero di semafori aumenti, fino a quando ottengo un: 2012-05-09 16: 30: 12.856 java [14407: 3d87] UI persistente non è riuscito ad aprire il file file: // localhost/Users/juancn/Library /Saved%20Application%20State/net.java.openjdk.cmd.savedState/window_1.data: Troppi file aperti (24) – juancn