我尝试配置 JVM 进行远程监控,但在服务器上出现以下错误
The configuration has not been set for this resource due to : Invalid configuration: Error contacting resource: Can't connect to MBeanServer [{jmx.username=system, jmx.url=service:jmx:rmi:///jndi/rmi://localhost:6969/jmxrmi}]: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused]
我想监控 tomcat 服务器,根据文档我在 /tomcat/bin/catalina.sh 文件中添加了远程监控 Mbean 服务器连接字符串
[ $1 != "stop" ] && JAVA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=6969 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false $JAVA_OPTS"
export JAVA_OPTS
之后我重启了 tomcat 服务。但是没有看到服务器上监听的端口 6969。重启 tomcat 后我通过“netstat -an | grep 696”检查了它,我认为这就是问题所在。这台机器上没有使用端口 6969。
答案1
你说你正在尝试连接到远程 jmx。那么如何
mx.url=服务:jmx:rmi:///jndi/rmi://localhost:6969/jmxrmi
机器上的 localhost 可以工作吗?我认为你应该使用远程机器的 IP,而不是 localhost。
答案2
嗯,看起来 100% 正确。以下是我在 Windows 环境中使用的内容:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=9988
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false
我认为有两个因素可能存在问题: 格式。我看到你放了:
JAVA_OPTS="-Dcom.sun.ma...
尝试为第一个元素添加一个“空格”,就像我在配置中所做的那样。您还可以在生成 $JAVA_OPST 变量后使用 echo,并检查语法是否正确。
另一个是 JVM 版本。¿1.5?¿1.6?¿JRE?¿JDK? 如果您的安装出现问题,请尝试使用最新版本(或至少 1.6)。
答案3
最后我让它工作了。我在 tomcat 启动脚本中的 JAVA_OPTS 变量中添加了以下设置:
JAVA_OPTS="-Djava.awt.headless=true -Xms256m -Xmx1024m -XX:PermSize=512m -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
答案4
1)从以下网址下载 jmxterm: http://wiki.cyclopsgroup.org/jmxterm:download 2)将下载的jar文件复制到测试服务器
3)ssh 到测试服务器
4)在测试服务器上启动JMX shell:
$ java -jar jmxterm-1.0-alpha-4-uber.jar -l 本地主机:20051
(注意:端口 20051 是您的服务器用于 JMX 的端口。我查看了您的一台服务器的数据,并在 java 命令行上看到以下内容:-Dcom.sun.management.jmxremote.port=20051。如果测试服务器使用不同的 java 命令行,则需要找到相同的选项和端口号(如果不同))
5)测试外壳是否连接正确:
$>打开
你会得到类似这样的结果:
rmi://127.0.1.1 4,服务:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
6) 列出可用的 Mbean,复制粘贴输出并发送给我。我们将审查哪些可用以及哪些需要。
$>豆类
7)检查给定 bean 的可用属性:
$>bean name_of_object from_output_above(例如.net.lag.kestrel:name=queues.weather_updates,type=Config)
bean 设置为 net.lag.kestrel:name=queues.weather_updates,type=Config
$>信息
mbean = net.lag.kestrel:名称=queues.weather_updates,类型=配置
类名 = net.lag.configgy.ConfigMap
属性
%0-max_age(java.lang.String,rw)
%1-max_items(java.lang.String,rw)
运营
%0-void add_list(java.lang.String键,java.lang.String值)
%1-void删除(java.lang.String key)