2015-01-23 2 views
0

Я отлаживал проблему с Java-процессом, открывая случайный порт в диапазоне от 30 000 до 50000.Как управлять номером порта для JMX?

Мне было интересно узнать, что представляет собой стек потоков, связанный с сокетом с портом, поэтому я собрал кучу кучи java-процесса и определил, что поток стека имеет имя «RMI TCP Accept-0». С немного Googling я обнаружил, что этот поток может быть использован для JMX monitoring by jConsole

Так что я искал способ, чтобы контролировать этот номер порта, и я нашел родственный с ответом here

Даже после указания номера порта, Я все еще вижу, что процесс Java открывает этот случайный порт.

Я хотел бы вернуться к стеку и посмотреть, правильно ли я понимаю, что это может быть порт JMX. Вот стек я вижу:

"RMI TCP Accept-0" daemon prio=10 tid=0x00007f3367404000 nid=0x14fb runnable [0x00007f33507b3000] 
    java.lang.Thread.State: RUNNABLE 
     at java.net.PlainSocketImpl.socketAccept(Native Method) 
     at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 
     at java.net.ServerSocket.implAccept(ServerSocket.java:530) 
     at java.net.ServerSocket.accept(ServerSocket.java:498) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:388) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:360) 
     at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
     - None 
+0

Чтобы уточнить, вы уверены, что этот процесс * прослушивает * на этом случайном порту? Какая ОС это? – Alex

+0

Отметьте этот ответ: http://stackoverflow.com/questions/20884353/why-java-opens-3-ports-when-jmx-is-configured – Alex

+0

Да, я забыл упомянуть об этом. Он находится в состоянии прослушивания на этом порту. Я проверяю поток, который опубликует через мгновение, что дает. – vinayc

ответ

0

Похоже, ваше понимание, что «этот поток может быть использован для JMX мониторинга по Jconsole» не действует. На самом деле, скорее всего, это неверно, поскольку сокет порта JMX-сервера не будет выбран случайным образом. Поэтому моя рекомендация - снова проверить, что это за поток.

+0

: Имеются разумные доказательства того, что этот поток связан с JMX. Я написал простой Java-код, который спит навсегда и указан с аргументами: '-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 9123 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.local.only = true' Когда я беру дамп потока для процесса, я вижу выше «RMI TCP Accept- 0 ". Теперь, когда я просто запускаю программу Java без аргументов JMX, как указано выше, я не вижу этот поток в дампе. – vinayc

+0

@ Vinayc действительно действительно хороший тест, однако я подозреваю, что наличие этого аргумента JMX может добавить в систему гораздо больше потоков, чем только поток сокетов сервера JMX. Вообще говоря, поток сокетов сервера не открывает случайные порты, но клиентский запрос может вызвать его открытие сокета на стороне сервера, это похоже на это. –

Смежные вопросы