У меня есть java программа, которая страдает от утечки файлового дескриптора.
lsof -p <PID> -nP
показывает огромное количество элементов, которые указывают на один и тот же индекс. Вот пример списка:
java 16352 myprogram 354u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
java 16352 myprogram 355u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
java 16352 myprogram 356u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
, затем я использовал netstat -ano
, и это показывает, что Inode указывает на активный сокет домена unix. вот список:
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 1755939110 /tmp/.java_pid16352.tmp
unix 2 [ ] STREAM CONNECTED 1755871862
unix 2 [ ] STREAM CONNECTED 1755895875
вот информация, предоставленная /proc/16352/net/unix
:
Num RefCount Protocol Flags Type St Inode Path
ffff8803d0181400: 00000002 00000000 00010000 0001 01 1755939110 /tmp/.java_pid16352.tmp
ffff880426541400: 00000002 00000000 00000000 0001 03 1755871862
ffff88042805e800: 00000002 00000000 00000000 0001 03 1755895875
Я попытался найти другой конец сокета домена unix (https://unix.stackexchange.com/questions/16300/whos-got-the-other-end-of-this-unix-socketpair/190606#190606), но lsof +E -aUc Xorg
ничего не дало; ss -xp | grep 1755895875
также ничего не предоставил (я не понимаю, что означает «Сокеты идентифицируются по их номеру инода. Обратите внимание, что это не связано с индексом файловой системы файла сокета.» В ответе Стефана Шазеласа)
, пожалуйста, помогите мне найти способ выяснить:
- , какой поток в моем java процессе непрерывно генерирует эти дескрипторы сокетов Doman unix и приводит к проблеме утечки файловых дескрипторов.
- как узнать другую конечную точку сокета домена unix.