Unix утечка дескриптора доменного сокета в программе java - PullRequest
1 голос
/ 20 февраля 2020

У меня есть 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 также ничего не предоставил (я не понимаю, что означает «Сокеты идентифицируются по их номеру инода. Обратите внимание, что это не связано с индексом файловой системы файла сокета.» В ответе Стефана Шазеласа)

, пожалуйста, помогите мне найти способ выяснить:

  1. , какой поток в моем java процессе непрерывно генерирует эти дескрипторы сокетов Doman unix и приводит к проблеме утечки файловых дескрипторов.
  2. как узнать другую конечную точку сокета домена unix.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...