#java
Вопрос:
У нас есть несколько java-приложений, запущенных на узлах кластера. Они либо используют tomcat, либо jetty, и мы настраиваем их на использование определенных портов. Мы также настраиваем JMX для использования определенных портов, как com.sun.management.jmxremote.port
и com.sun.management.jmxremote.rmi.port
(мы даже ограничиваем их определенным сетевым интерфейсом), поэтому на типичном сервере должно быть открыто 3 порта (http, https и jmx).
Мы обнаруживаем, что все наши сервисы имеют 4 открытых порта, и, запустив их в strace
режиме confims, кто-то открывает порт ramdom на всех интерфейсах:
bind(210, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
Я попытался подключиться с помощью jconsole к этому порту, но получил сообщение об ошибке:
error during JRMP connection establishment; nested exception is java.net.SocketException: Connection reset[...]
и остальная часть ошибки улетает от границы окна подключения jconsole 🙁
Поэтому мой вопрос в том, есть ли способ найти класс или трассировку стека, которая указывала бы на класс, открывающий этот сокет?
Комментарии:
1. (1) Установите точки останова на
ServerSocketFactory
? Если у вас нет подходящего отладчика,jdb
вы можете справиться с чем-то таким простым. (2) В качестве другого подхода вместоjconsole
подключения к более базовому инструменту, такому какtelnet netcat socat
илиcat </dev/tcp/$addr/$port
(в зависимости от ОС или bash), и посмотрите, что он выводит, если вообще что-то выводит.2. Вы можете попытаться определить поток , ожидающий «accept()» в этом сокете, запустив
jstack $pid
его, и проанализировать трассировку стека.3. @dave_thompson_085 я попробовал с
jdb
иstop in java.net.Socket.bind
, но почему-то на этом не остановился. То, что я вижу, естьRMI TCP Accept-19084
иRMI TCP Accept-0
в списке тем, так что, может быть, это так?4. Может быть, вы можете посмотреть, что обычно работает на этом порту? Порт 210, похоже, Z39.50 .
5. Это не порт 210, это файловый дескриптор 210. Порт является случайным, на основе
sin_port=htons(0)
.