Назад | Перейти на главную страницу

Tomcat: где настроить jmx JAVA_OPTS или CATALINA_OPTS

У меня Tomcat установлен на Ubuntu. Я хочу включить JMX для мониторинга, поэтому в catalina.sh я изменил JAVA_OPTS так как:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=4998 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

После перезапуска JMX работает, но когда я хочу остановить tomcat, он выдает ошибку:

Ошибка: исключение, созданное агентом: java.rmi.server.ExportException: порт уже используется: 5555; вложенное исключение: java.net.BindException: адрес уже используется:

После некоторого поиска в Google я узнал, что мы записали все конфигурации JMX в CATALINA_OPTS но после записи всех конфигураций внутри CATALINA_OPTS я не могу подключиться.

Создайте файл рядом с catalina.sh называется setenv.sh. Таким образом, все ваши изменения будут в отдельном файле.

Использовать CATALINA_OPTS скорее, чем JAVA_OPTS поскольку CATALINA_OPTS используется только при запуске, тогда как JAVA_OPTS используется при запуске и остановке.

Если вы установили Tomcat из пакетов, вам необходимо изменить JAVA_OPTS в файле

/etc/default/tomcat...

Привет, чтобы сделать ответ более ясным, я добавляю ниже.

Я создал файл setenv.sh под $CATALINA_HOME/bin/. Содержание файла показано ниже.

JAVA_OPTS="-Dcom.sun.management.jmxremote=true \
                   -Dcom.sun.management.jmxremote.ssl=false \
                   -Dcom.sun.management.jmxremote.authenticate=false \
                   -Djava.rmi.server.hostname=192.168.40.10"

Нет необходимости добавлять файл setenv.sh в catalina.sh, поскольку, увидев файл с именем setenv.sh, tomcat автоматически примет параметры. Затем я добавил строку жирным шрифтом, как показано ниже в catalina.sh.

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi
***export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9090"***

Таким образом мы можем избежать проблемы конфликта портов в Tomcat. Спасибо.

У вас что-нибудь работает на порту 5555? Вы можете попробовать бежать

lsof -i :5555 or netstat -tulpn | grep :\5555 

чтобы увидеть, что работает на этом порту.