使用 jmx 端口选项时无法停止 tomcat6

使用 jmx 端口选项时无法停止 tomcat6

我们在两个不同的环境中运行 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  ]

希望这对其他人有帮助。

相关内容