У нас есть tomcat6, работающий в двух разных средах, на обеих работают CentOS 6.6 и OpenJDK 1.7. В одной среде я не могу остановить tomcat6 при выдаче
service tomcat6 stop
В среде, в которой это не удается, единственное отличие состоит в том, что есть некоторые дополнительные параметры:
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=**8081**
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=172.19.13.211
При остановке в catalina.out фиксируются следующие ошибки:
OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory (errno = 1).
OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory (errno = 1).
OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory (errno = 1).
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: **8081**; nested exception is:
java.net.BindException: Address already in use
Похоже, что именно порт jmx вызывает эту проблему, но, не удаляя его полностью, есть ли способ заставить tomcat6 изящно останавливаться?
Ссылка, упомянутая в моем комментарии, привела меня к Сообщение блога за которым я следил. Я создал файл /usr/share/tomcat6/bin/setenv.sh и сделал его доступным для чтения со следующим содержимым:
export CATALINA_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=172.19.13.211"
Однако при запуске tomcat6 параметры jmx не включаются. Какие-либо предложения?
Вот что у меня сработало:
Используя некоторую информацию из эта страница Я добавил следующее в сценарий запуска tomcat6 (который в моем случае был /usr/sbin/tomcat6
):
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
Окончательное содержание моего /usr/share/tomcat6/bin/setenv.sh
файл:
#!/bin/sh
export CATALINA_OPTS="-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.port=8081 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote=true \
-Djava.rmi.server.hostname=172.19.13.211"
Теперь я могу успешно запустить tomcat6 с параметрами jmx:
[root@hrndvsoi-dev1-ucsync01 tomcat6]# service tomcat6 start
Starting tomcat6: [ OK ]
[root@hrndvsoi-dev1-ucsync01 tomcat6]# ps -ef | grep tomc | grep -v grep | sed -e 's/ /\n/g' | grep -e jmx -e rmi
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=8081
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=172.19.13.211
И я могу остановить tomcat6 без ошибок:
[root@hrndvsoi-dev1-ucsync01 tomcat6]# service tomcat6 stop
Stopping tomcat6: [ OK ]
Надеюсь, это поможет кому-то другому.