我正在尝试使用JMX使用JDK8监视Tomcat8。 我已经设置了我的代理并修改了startup.sh。
在我的zabbix_java_gateway.log上,我收到以下异常:
WARN com.zabbix.gateway.SocketProcessor - 错误处理请求 com.zabbix.gateway.ZabbixException:java.net.SocketTimeoutException: 连接超时: 服务:JMX:RMI:/// JNDI / RMI://server1.example.com:10052 / jmxrmi 在com.zabbix.gateway.JMXItemChecker.getValues(JMXItemChecker.java:97) 〜[ZABBIX-java的网关2.4.7.jar:NA] 在com.zabbix.gateway.SocketProcessor.run(SocketProcessor.java:63) 〜[ZABBIX-java的网关2.4.7.jar:NA] 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [NA:1.8.0_71] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) [NA:1.8.0_71] at java.lang.Thread.run(Thread.java:745)[na:1.8.0_71]引起:java.net.SocketTimeoutException:连接超时: 服务:JMX:RMI:/// JNDI / RMI://server1.example.com:10052 / jmxrmi 在com.zabbix.gateway.ZabbixJMXConnectorFactory.connect(ZabbixJMXConnectorFactory.java:123) 〜[ZABBIX-java的网关2.4.7.jar:NA] 在com.zabbix.gateway.JMXItemChecker.getValues(JMXItemChecker.java:89) 〜[ZABBIX-java的网关2.4.7.jar:NA] ...省略了4个常见帧
在我的 startup.sh 上,我将以下内容添加到CATALINA_OPTS
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 10052 -Dcom.sun.management.jmxremote.authenticate = true -Dcom.sun.management.jmxremote.password.file = / opt /tomcat-latest/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file = /选择/ Tomcat的最新/ conf目录/ jmxremote.access -Dcom.sun.management.jmxremote.ssl = false -Djava.rmi.server.hostname = server1.example.com
我的 zabbix_agentd.conf 包含以下内容:
PidFile = / tmp / zabbix_agentd.pid LogFile = / var / log / zabbix_agentd.log LogFileSize = 1 DebugLevel = 3 Server = monitor.example.com Hostname = server1.example.com ListenPort = 10050 StartAgents = 5超时= 30
我已经完成了以下工作:
奇怪的是,相同的设置适用于带有JDK7的Tomcat6。
我已经将zabbix服务器上的JDK版本更新为比我的JAVA节点上安装的JDK更新 - 结果仍然相同 - 以
结尾ZBX_TCP_READ()失败:[4]系统调用中断
所以我最终弄明白了。
我有我的tomcat配置文件-Djava.rmi.server.hostname=server1.example.com
我想念主机名应该设置为监控服务器和受监控服务器主机名。
显然,Tomcat 6上存在一个错误,该指令不起作用。
删除它完全解决了问题。
谢谢,
Liron