Подтвердить что ты не робот

Увидеть слишком много lsof не может определить протокол


У меня есть процесс/приложение Java. Когда я запускаю /usr/sbin/lsof -p в этом java-процессе, я вижу много "не могу определить протокол". Кроме того, интересно, файловые дескрипторы (FD) растут с очень устойчивой скоростью. И те созданные FD, имеют описание как "не могут идентифицировать протокол".

Итак, есть ли способ обработать/профилировать процесс java, чтобы пригводить, кто создает много FD. Любое подробное объяснение любого инструмента действительно будет действительно полезным.

Быстрый поиск в Google говорит мне, что strace - это один из способов, но IIUC, который покажет системные вызовы Linux, выходящие из java-процесса. Меня больше интересует, какая часть моего java-кода ведет себя плохо, чем генерируются системные вызовы.

Опять же, любые идеи/предложения будут просто великолепны!

4b9b3361

Ответ 2

Когда lsof печатает "Невозможно определить протокол", это обычно относится к сокетам (в соответствующих выходных строках также должно указываться "носок" ).

Итак, где-то в вашем коде вы, вероятно, подключаете сокеты и не закрываете их правильно (возможно, вам нужен блок finally).

Я предлагаю вам выполнить свой код с помощью отладчика (проще всего использовать IDE, возможно, с удаленным отладчиком, если это необходимо), при этом lsof бок о бок. В конечном итоге вы сможете увидеть, какой поток/строка кода создает эти дескрипторы файлов.

Для получения более подробной информации о выходе Lsof см. пункт 10.2.2 этот FAQ.

Ответ 3

Возможно, вы наблюдаете ошибку в JVM 1.6 с утечкой соединений при использовании SSL и имени хоста: http://bugs.sun.com/view_bug.do?bug_id=6745052