我们在两个不同的环境中运行 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 正常停止?
更新 1
我评论中提到的链接让我找到了博客文章我遵循了这些步骤。我创建了 /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 选项未包含在内。有什么建议吗?
答案1
以下是对我有用的方法:
使用来自这一页我在 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"
现在我可以使用 jmx 选项成功启动 tomcat6:
[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 ]
希望这对其他人有帮助。