Cela peut ne pas être pratique dans votre cas, mais ce que j'ai fait une fois quand j'ai eu un problème similaire avec les connexions de bases de données ouvertes, c'est remplacer la fonction "open" par la mienne. (Commodément, j'avais déjà cette fonction parce que nous avions écrit notre propre pool de connexion.) Dans ma fonction, j'ai ensuite ajouté une entrée à une table enregistrant l'ouverture. J'ai fait un appel de trace de pile et ai sauvé l'identification de l'appelant, avec le temps appelé et j'oublie quoi d'autre. Lorsque la connexion a été libérée, j'ai supprimé l'entrée de la table. Ensuite, j'ai eu un écran où nous pouvions vider la liste des entrées ouvertes. Vous pouvez alors regarder l'horodatage et voir facilement quelles connexions ont été ouvertes pour des durées improbables et quelles fonctions ont été ouvertes. À partir de là, nous avons été en mesure de localiser rapidement les deux fonctions qui ouvraient les connexions et ne parvenaient pas à les fermer.
Si vous avez beaucoup de handles de fichiers ouverts, il y a de fortes chances que vous n'ayez pas réussi à les fermer lorsque vous avez terminé. Vous dites que vous avez vérifié les blocs try/finally, mais je soupçonnerais que quelque part dans le code vous avez manqué un mauvais, ou que vous avez une fonction qui fait des mains et qui n'arrive jamais à la fin. Je suppose qu'il est également possible que vous fassiez des fermetures correctes chaque fois que vous ouvrez un fichier, mais que vous ouvrez des centaines de fichiers simultanément. Si c'est le cas, je ne suis pas sûr de savoir ce que vous pouvez faire d'autre qu'une refonte sérieuse du programme pour manipuler moins de fichiers, ou une refonte sérieuse du programme pour mettre en file d'attente vos accès au fichier. (À ce stade, j'ajoute l'habituel, "Sans connaître les détails de votre application, etc.)
avec un lsof -p PID, l'entrée la plus courante est la suivante: java 19157 dev 131u unix 105,98572 0t829 55050244/devices/pseudo/tl @ 0: ticots -> (socketpair: 0x1810c) (0x300199eed50) Une idée de ce que cela signifie et comment je peux le combattre? – dlinsin