[ZBX-19587] clarify why JMX item is unsupported in case of InstanceNotFoundException Created: 2021 Jun 18  Updated: 2024 Apr 10  Resolved: 2021 Nov 29

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: Java gateway (J)
Affects Version/s: 5.4.1
Fix Version/s: 5.0.18rc1, 5.4.8rc1, 6.0.0alpha7, 6.0 (plan)

Type: Problem report Priority: Major
Reporter: Oleksii Zagorskyi Assignee: Vladislavs Sokurenko
Resolution: Fixed Votes: 1
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: PNG File image-2021-06-28-10-23-08-634.png    
Issue Links:
Duplicate
Team: Team A
Sprint: Sprint 77 (Jun 2021), Sprint 78 (Jul 2021), Sprint 79 (Aug 2021), Sprint 80 (Sep 2021), Sprint 81 (Oct 2021), Sprint 82 (Nov 2021)
Story Points: 0.5

 Description   

I use key:

jmx["java.lang:type=GarbageCollector,name=PS MarkSweep",LastGcInfo.startTime]

Imagine that I used incorrect mbean name so my items gets unsupported with an error description in frontend just:

java.lang:type=GarbageCollector,name=PS MarkSweep

While if look to debug of java gateway we also can see this quite useful word: javax.management.InstanceNotFoundException

Here is full debug:

2021-06-18 13:47:49.324 [pool-1-thread-1] DEBUG com.zabbix.gateway.SocketProcessor - dispatched request to class com.zabbix.gateway.JMXItemChecker
2021-06-18 13:47:49.325 [pool-1-thread-1] DEBUG c.z.g.ZabbixJMXConnectorFactory - connecting to JMX agent at 'service:jmx:rmi:///jndi/rmi://127.0.0.1:12345/jmxrmi'
2021-06-18 13:47:49.425 [pool-1-thread-1] DEBUG com.zabbix.gateway.ItemChecker - getting value for item 'jmx["java.lang:type=GarbageCollector,name=PS MarkSweep",LastGcInfo.startTime]'
2021-06-18 13:47:49.441 [pool-1-thread-1] DEBUG com.zabbix.gateway.ItemChecker - caught exception for item 'jmx["java.lang:type=GarbageCollector,name=PS MarkSweep",LastGcInfo.startTime]'
javax.management.InstanceNotFoundException: java.lang:type=GarbageCollector,name=PS MarkSweep
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:na]
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643) ~[na:na]
        at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) ~[na:na]
        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) ~[na:na]
        at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[na:na]
        at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[na:na]
        at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[na:na]
        at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) ~[na:na]
        at sun.reflect.GeneratedMethodAccessor97.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:na]
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346) ~[na:na]
        at sun.rmi.transport.Transport$1.run(Transport.java:200) ~[na:na]
        at sun.rmi.transport.Transport$1.run(Transport.java:197) ~[na:na]
        at java.security.AccessController.doPrivileged(Native Method) ~[na:na]
        at sun.rmi.transport.Transport.serviceCall(Transport.java:196) ~[na:na]
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) ~[na:na]
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) ~[na:na]
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) ~[na:na]
        at java.security.AccessController.doPrivileged(Native Method) ~[na:na]
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) ~[na:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:na]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:na]
        at java.lang.Thread.run(Thread.java:745) ~[na:na]
        at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303) ~[na:na]
        at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279) ~[na:na]
        at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164) ~[na:na]
        at jdk.remoteref/jdk.jmx.remote.internal.rmi.PRef.invoke(Unknown Source) ~[na:na]
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl_Stub.getAttribute(Unknown Source) ~[na:na]
        at java.management.rmi/javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.getAttribute(RMIConnector.java:904) ~[na:na]
        at com.zabbix.gateway.JMXItemChecker.getStringValue(JMXItemChecker.java:184) ~[zabbix-java-gateway.jar:na]
        at com.zabbix.gateway.ItemChecker.getJSONValue(ItemChecker.java:92) ~[zabbix-java-gateway.jar:na]
        at com.zabbix.gateway.JMXItemChecker.getValues(JMXItemChecker.java:107) ~[zabbix-java-gateway.jar:na]
        at com.zabbix.gateway.SocketProcessor.run(SocketProcessor.java:79) ~[zabbix-java-gateway.jar:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
2021-06-18 13:47:49.444 [pool-1-thread-1] DEBUG c.z.gateway.BinaryProtocolSpeaker - sending the following data in response: {"data":[{"error":"java.lang:type=GarbageCollector,name=PS MarkSweep"}],"response"
2021-06-18 13:47:49.445 [pool-1-thread-1] DEBUG com.zabbix.gateway.SocketProcessor - finished processing incoming connection

I wonder, wold it be possible to include the "InstanceNotFoundException" part to error message too?

That would be much more clear that it's a response form a remote JMX agent, but not sole local side issue.



 Comments   
Comment by Oleksii Zagorskyi [ 2021 Jun 18 ]

Interesting that this issue supposed to be fixed in ZBX-14586 for v4.0 but my test is based on java gateway 5.0.6 and you see the error response contains only Mbean part.

Comment by Vladislavs Sokurenko [ 2021 Nov 09 ]

Fixed in pull request feature/ZBX-19587-5.0

Comment by Vladislavs Sokurenko [ 2021 Nov 12 ]

Fixed in:

Generated at Tue Apr 08 05:50:06 EEST 2025 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.