咱们先说怎么做,然后再聊聊一些原理,当然,本人技术能力有限,有错误的地方,欢迎指正。
1.本机环境,远程环境
本机环境:windows 7 java version "1.8.0_121"
远程环境:centos 6.5 java version "1.7.0_79" tomcat8.5
2.需要修改的内容
1)在远程服务器的{TOMCAT_HOME}/bin下查看有没有setenv.sh这个文件,如果没有则添加这个文件,如果有则修改这个文件
2)setenv.sh文件里的内容如下:
export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=18080#jconsole连接时需要的端口-Dcom.sun.management.jmxremote.authenticate=true#是否需要验证-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password # 验证需要的密码文件-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access #验证需要的用户文件-Dcom.sun.management.jmxremote.ssl=true -Djava.rmi.server.hostname=11.168.1.153"#这个是tomcat所在机器的ip
a.jmxremote.password(放在{TOMCAT_HOME}/config下),里面是用户名密码,这个文件必需加上权限控制,chmod 600 jmxremote.password
demon 123456
b.jmxremote.access(放在{TOMCAT_HOME}/config下),用户权限的控制
demon readonly
3)ok,重启tomcat,然后使用在windows的cmd下打开jconsole
ok,连接成功。
3.现在我们来聊一聊原理以及问题。
1)tomcat重启会报端口被占用的错,就是上面的18080被占用,这个暂时没有想到怎么解决,只是lsof -i tcp:18080找到这个程序,然后kill掉
2)为什么要把配置写在setenv.sh中,其实网上有其它的博客是说放在catalina.sh中,这样也可以,但是放在另一个文件管理岂不是更好?
# 这里catalina.sh中的一段代码,它会去找setenv.sh然后执行它,而setenv.sh中的代码其实就是export一个变量
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
3)如果上述操作仍然连接不上,此时就要考虑防火墙等问题了,centos关闭防火墙的命令是service iptables stop(还有其它的方式)。
欢迎一起讨论。
端口占用的问题已经解决,修改setenv.sh文件中的JAVA_OPTS为CATALINA_OPTS,原因:
Setting these properties in JAVA_OPTS tries to start a jmx server when you start tomcat AND when you shutdown tomcat. Hence the port already in use exception. You need to set these properties for CATALINA_OPTS instead of JAVA_OPTS. This will only run when you start tomcat
意思是,当你设置为JAVA_OPTS设置这些值的时候尝试去启动了一个jmx服务当你启动与关闭tomcat的时候,因此这个端口抛出被占用的异常。你需要为CATALINA_OPTS设置这些值而不是JAVA_OPTS,这样只有启动tomcat时才会启动jmx服务
其实意思就是如果JAVA_OPTS设置了那些值的话,tomcat在启动跟关闭都会启动一个jmx服务,在启动时端口已经用了,所以关闭的时候会报错。