web-dev-qa-db-fra.com

Voir trop de LSO ne peut pas identifier le protocole


J'ai un Java processus/application. Lorsque j'exécute/usr/sbin/lsof -p sur ce Java processus, je vois un beaucoup de "ne peut pas identifier le protocole". De plus, il est intéressant de noter que les descripteurs de fichiers (FD) augmentent à un rythme très constant. Et les FD qui sont créés sont décrits comme "ne peuvent pas identifier le protocole".

Donc, existe-t-il un moyen d'instrumenter/profiler le processus Java afin de déterminer qui crée autant de FD. Toute explication détaillée sur n'importe quel outil serait vraiment très utile.

Une recherche rapide sur Google me dit que strace est un moyen mais IIUC, qui montrera les appels système linux sortant du processus Java. Je suis plus intéressé par quelle partie de mon Java se comporte mal que les appels système générés.

Encore une fois, toutes les idées/suggestions seraient tout simplement géniales!

23
Johnny

Impressions LSOF can't identify protocol pour les connexions TCP/IP semi-ouvertes: https://idea.popcount.org/2012-12-09-lsof-cant-identify-protocol/

14
Marek

Lorsque lsof affiche "Protocole impossible à identifier", cela concerne généralement les sockets (il doit également indiquer "chaussette" dans les lignes de sortie pertinentes).

Donc, quelque part dans votre code, vous connectez probablement des sockets et ne les fermez pas correctement (peut-être avez-vous besoin d'un bloc enfin).

Je vous suggère de parcourir votre code avec un débogueur (le plus facile à utiliser votre IDE, éventuellement avec un débogueur distant, si nécessaire), tout en exécutant lsof côte à côte. Vous devriez éventuellement être en mesure de voir quel thread/ligne de code crée ces descripteurs de fichiers.

Voir le point 10.2.2 de cette FAQ pour plus de détails sur la sortie Lsof.

8
laher

Peut-être que vous observez un bogue dans JVM 1.6 avec une fuite de connexions lorsque vous utilisez SSL et le nom d'hôte: http://bugs.Sun.com/view_bug.do?bug_id=6745052

1
Michał Niklas