У нас есть удаленный Linux-модуль для разработки различных приложений Java, и мы используем VisualVM поверх ssh для профилирования приложений , как описано здесь . Есть ли способ включить JMX / профилирование в наших процессах Java без необходимости выделять / предоставлять номера портов среди наших процессов / пользователей? Раздражает необходимость всегда указывать (уникальный) номер порта только для включения профилирования.
Чтобы сделать все это более конкретным: жесткое кодирование порта, очевидно, не работает и будет конфликтовать:
exec java -Dcom.sun.management.jmxremote.port=3000 ...
Мы можем требовать всегда указывать уникальный порт при каждом запуске процесса, но это утомительно - вы должны убедиться, что ваши порты не конфликтуют с другими вашими процессами, а также не конфликтуют с другими пользователями:
exec java -Dcom.sun.management.jmxremote.port=$1 ...
В настоящее время мы используем:
exec java -Dcom.sun.management.jmxremote.port=$(( $RANDOM + 2000 )) ...
Но мы все еще время от времени сталкиваемся с занятыми номерами портов.
Мы можем продолжить с более причудливыми сценариями (например, запросить netstat
для занятых номеров портов и надеяться, что гонки нет), но нам интересно, есть ли лучший способ / делаем ли мы это неправильно.