У меня есть процесс Java (Glassfish), который пропускает файловые дескрипторы. Я знаю это, потому что я получаю полезное java.io.IOException: Too many open files
исключение. Я могу заглянуть внутрь /proc/PID#/fd
и увидеть все дескрипторы открытых файлов. Когда я использую lsof, я получаю очень большое количество записей вроде этого:
java 18510 root 8811u sock 0,4 1576079 не может определить протокол
java 18510 root 8812u sock 0,4 1576111 не может определить протокол
java 18510 root 8813u sock 0,4 1576150 не может определить протокол
Я вижу 12 новых созданных в минуту. Какие опции я могу использовать в lsof или какие другие инструменты доступны мне, чтобы помочь отследить дескрипторы файлов сокетов, где протокол не может быть идентифицирован?
источник
Ответы:
чтобы увидеть топ-20 дескриптор файла с помощью процессов:
вывод находится в формате дескриптор файла счетчик, pid, cmndline для процесса
пример вывода
источник
Ознакомьтесь с командой strace. Он контролирует системные вызовы. Недавно я использовал его, чтобы отследить утечки файловых дескрипторов, которые вызывали многократный сбой нашего демона snmpd. Требуется некоторое привыкание, но это мощный инструмент.
Вы можете использовать strace для подключения к работающему процессу (не забывайте флаг -f для отслеживания дочерних процессов).
источник
Что именно вы пытаетесь отследить? Удаленный IP-адрес (а), связанный с утечкой FD, неисправным кодом или чем-то еще?
Поскольку вы уже определили, что существует утечка, связаться с инженерами, ответственными за этот процесс Java, кажется разумным следующим шагом.
источник
can't identify protocol
не дает инженерам много работы. Есть ли в lsof инструменты или опции, которые я не вижу, которые мне следует использовать? Проблема не возникает в тестовой среде и запускается в этой среде только после миграции кабинета. В том же коде проблем не было до миграции, и когда приложение не было развернуто, Glassfish все еще сам по себе. Мое лучшее предположение - что-то сломалось с точки зрения сети, и сокеты пытаются инициализироваться, но не могут, а затем они зависают и остаются.