Bug 1897602
| Summary: | Warnings when using ManagementFactory.getPlatformMBeanServer with -Xcheck:jni VM argument [rhel-7.9.z] | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Francisco De Melo <fdemeloj> | ||||||
| Component: | java-11-openjdk | Assignee: | Andrew John Hughes <ahughes> | ||||||
| Status: | CLOSED ERRATA | QA Contact: | OpenJDK QA <java-qa> | ||||||
| Severity: | unspecified | Docs Contact: | |||||||
| Priority: | unspecified | ||||||||
| Version: | 7.9 | CC: | ahughes, jreznik, jvanek, sgehwolf | ||||||
| Target Milestone: | rc | Keywords: | Triaged, ZStream | ||||||
| Target Release: | --- | Flags: | ahughes:
mirror+
|
||||||
| Hardware: | Unspecified | ||||||||
| OS: | Unspecified | ||||||||
| Whiteboard: | |||||||||
| Fixed In Version: | java-11-openjdk-11.0.10.0.9-1.el7_9 | Doc Type: | Bug Fix | ||||||
| Doc Text: |
The method ManagementFactory.getPlatformMBeanServer() calls native code using the Java Native Interface (JNI). When running the method with the -Xcheck:jni option passed to the Java Virtual Machine (JVM), the native code was found to have a memory leak. This leak is fixed in this update.
|
Story Points: | --- | ||||||
| Clone Of: | Environment: | ||||||||
| Last Closed: | 2021-03-16 13:58:13 UTC | Type: | Bug | ||||||
| Regression: | --- | Mount Type: | --- | ||||||
| Documentation: | --- | CRM: | |||||||
| Verified Versions: | Category: | --- | |||||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||||
| Embargoed: | |||||||||
| Attachments: |
|
||||||||
Created attachment 1729129 [details]
ManagementFactory.getPlatformMBeanServer
Test with ManagementFactory.getPlatformMBeanServer
Hi, can someone acknowledge pls? Yes, this is reproducible in JDK head too: $ ./build/linux-x86_64-server-release/images/jdk/bin/java -Xcheck:jni MbeanServerTest WARNING: JNI local refs: 33, exceeds capacity: 32 at com.sun.management.internal.DiagnosticCommandImpl.getDiagnosticCommandInfo(jdk.management@17-internal/Native Method) at com.sun.management.internal.DiagnosticCommandImpl.getMBeanInfo(jdk.management@17-internal/DiagnosticCommandImpl.java:196) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getNewMBeanClassName(java.management@17-internal/DefaultMBeanServerInterceptor.java:329) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(java.management@17-internal/DefaultMBeanServerInterceptor.java:315) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(java.management@17-internal/JmxMBeanServer.java:522) at java.lang.management.ManagementFactory.lambda$addMXBean$7(java.management@17-internal/ManagementFactory.java:902) at java.lang.management.ManagementFactory$$Lambda$22/0x0000000801057180.run(java.management@17-internal/Unknown Source) at java.security.AccessController.executePrivileged(java.base@17-internal/AccessController.java:784) at java.security.AccessController.doPrivileged(java.base@17-internal/AccessController.java:554) at java.lang.management.ManagementFactory.addMXBean(java.management@17-internal/ManagementFactory.java:892) at java.lang.management.ManagementFactory.lambda$getPlatformMBeanServer$1(java.management@17-internal/ManagementFactory.java:488) at java.lang.management.ManagementFactory$$Lambda$21/0x00000008010569f8.accept(java.management@17-internal/Unknown Source) at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(java.base@17-internal/ForEachOps.java:183) at java.util.Collections$2.tryAdvance(java.base@17-internal/Collections.java:4820) at java.util.Collections$2.forEachRemaining(java.base@17-internal/Collections.java:4828) at java.util.stream.ReferencePipeline$Head.forEach(java.base@17-internal/ReferencePipeline.java:762) at java.util.stream.ReferencePipeline$7$1.accept(java.base@17-internal/ReferencePipeline.java:276) at java.util.stream.ReferencePipeline$2$1.accept(java.base@17-internal/ReferencePipeline.java:179) at java.util.HashMap$ValueSpliterator.forEachRemaining(java.base@17-internal/HashMap.java:1766) at java.util.stream.AbstractPipeline.copyInto(java.base@17-internal/AbstractPipeline.java:484) at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base@17-internal/AbstractPipeline.java:474) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(java.base@17-internal/ForEachOps.java:150) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(java.base@17-internal/ForEachOps.java:173) at java.util.stream.AbstractPipeline.evaluate(java.base@17-internal/AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(java.base@17-internal/ReferencePipeline.java:596) at java.lang.management.ManagementFactory.getPlatformMBeanServer(java.management@17-internal/ManagementFactory.java:488) - locked <0x000000062f019688> (a java.lang.Class for java.lang.management.ManagementFactory) at MbeanServerTest.main(MbeanServerTest.java:3) I've filed this upstream bug for it: https://bugs.openjdk.java.net/browse/JDK-8258836 I've fixed JDK-8258836 in upstream head and will wait a bit before proposing this for 11u backport. As for https://bugs.openjdk.java.net/browse/JDK-8260436, it s already in 11u. Any plans with 8u? (In reply to jiri vanek from comment #14) > As for https://bugs.openjdk.java.net/browse/JDK-8260436, it s already in > 11u. Any plans with 8u? No, it's not an issue there. Different bug. $ /usr/lib/jvm/java-1.8.0-openjdk/bin/java -Xcheck:jni TestDiagnosticCommandImpl WARNING in native method: JNI call made without checking exceptions when required to from CallStaticObjectMethod at sun.management.DiagnosticCommandImpl.getDiagnosticCommandInfo(Native Method) at sun.management.DiagnosticCommandImpl.getMBeanInfo(DiagnosticCommandImpl.java:165) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getNewMBeanClassName(DefaultMBeanServerInterceptor.java:333) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:319) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) at java.lang.management.ManagementFactory$3.run(ManagementFactory.java:889) at java.lang.management.ManagementFactory$3.run(ManagementFactory.java:884) at java.security.AccessController.doPrivileged(Native Method) at java.lang.management.ManagementFactory.addDynamicMBean(ManagementFactory.java:884) at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:491) - locked <0x000000071ac62ac0> (a java.lang.Class for java.lang.management.ManagementFactory) at TestDiagnosticCommandImpl.main(TestDiagnosticCommandImpl.java:3) Fixed in later JDKs with: https://hg.openjdk.java.net/jdk-updates/jdk11u-dev/rev/a16236cd61d7 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (java-11-openjdk bug fix and enhancement update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2021:0869 |
Created attachment 1729128 [details] output_jni_test Description of problem: When using ManagementFactory.getPlatformMBeanServer() with -Xcheck:jni VM argument Several warnings appear on the log: ~~ WARNING: JNI local refs: 693, exceeds capacity: 692 at com.sun.management.internal.DiagnosticCommandImpl.getDiagnosticCommandInfo(jdk.management.1/Native Method) at com.sun.management.internal.DiagnosticCommandImpl.getMBeanInfo(jdk.management.1/DiagnosticCommandImpl.java:196) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getNewMBeanClassName(java.management.1/DefaultMBeanServerInterceptor.java:329) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(java.management.1/DefaultMBeanServerInterceptor.java:315) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(java.management.1/JmxMBeanServer.java:522) at java.lang.management.ManagementFactory.lambda$addMXBean$7(java.management.1/ManagementFactory.java:901) at java.lang.management.ManagementFactory$$Lambda$22/0x0000000800098c40.run(java.management.1/Unknown Source) at java.security.AccessController.doPrivileged(java.base.1/Native Method) at java.lang.management.ManagementFactory.addMXBean(java.management.1/ManagementFactory.java:891) at java.lang.management.ManagementFactory.lambda$getPlatformMBeanServer$1(java.management.1/ManagementFactory.java:488) at java.lang.management.ManagementFactory$$Lambda$21/0x0000000800098840.accept(java.management.1/Unknown Source) at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(java.base.1/ForEachOps.java:183) at java.util.Collections$2.tryAdvance(java.base.1/Collections.java:4745) at java.util.Collections$2.forEachRemaining(java.base.1/Collections.java:4753) at java.util.stream.ReferencePipeline$Head.forEach(java.base.1/ReferencePipeline.java:658) at java.util.stream.ReferencePipeline$7$1.accept(java.base.1/ReferencePipeline.java:274) at java.util.stream.ReferencePipeline$2$1.accept(java.base.1/ReferencePipeline.java:177) at java.util.HashMap$ValueSpliterator.forEachRemaining(java.base.1/HashMap.java:1675) at java.util.stream.AbstractPipeline.copyInto(java.base.1/AbstractPipeline.java:484) at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base.1/AbstractPipeline.java:474) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(java.base.1/ForEachOps.java:150) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(java.base.1/ForEachOps.java:173) at java.util.stream.AbstractPipeline.evaluate(java.base.1/AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(java.base.1/ReferencePipeline.java:497) at java.lang.management.ManagementFactory.getPlatformMBeanServer(java.management.1/ManagementFactory.java:488) - locked <0x000000071c61e488> (a java.lang.Class for java.lang.management.ManagementFactory) at TestDiagnosticCommandImpl.main(TestDiagnosticCommandImpl.java:3) WARNING: JNI local refs: 726, exceeds capacity: 725 at com.sun.management.internal.DiagnosticCommandImpl.getDiagnosticCommandInfo(jdk.management.1/Native Method) at com.sun.management.internal.DiagnosticCommandImpl.getMBeanInfo(jdk.management.1/DiagnosticCommandImpl.java:196) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getNewMBeanClassName(java.management.1/DefaultMBeanServerInterceptor.java:329) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(java.management.1/DefaultMBeanServerInterceptor.java:315) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(java.management.1/JmxMBeanServer.java:522) at java.lang.management.ManagementFactory.lambda$addMXBean$7(java.management.1/ManagementFactory.java:901) at java.lang.management.ManagementFactory$$Lambda$22/0x0000000800098c40.run(java.management.1/Unknown Source) at java.security.AccessController.doPrivileged(java.base.1/Native Method) at java.lang.management.ManagementFactory.addMXBean(java.management.1/ManagementFactory.java:891) at java.lang.management.ManagementFactory.lambda$getPlatformMBeanServer$1(java.management.1/ManagementFactory.java:488) at java.lang.management.ManagementFactory$$Lambda$21/0x0000000800098840.accept(java.management.1/Unknown Source) at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(java.base.1/ForEachOps.java:183) at java.util.Collections$2.tryAdvance(java.base.1/Collections.java:4745) at java.util.Collections$2.forEachRemaining(java.base.1/Collections.java:4753) at java.util.stream.ReferencePipeline$Head.forEach(java.base.1/ReferencePipeline.java:658) at java.util.stream.ReferencePipeline$7$1.accept(java.base.1/ReferencePipeline.java:274) at java.util.stream.ReferencePipeline$2$1.accept(java.base.1/ReferencePipeline.java:177) at java.util.HashMap$ValueSpliterator.forEachRemaining(java.base.1/HashMap.java:1675) at java.util.stream.AbstractPipeline.copyInto(java.base.1/AbstractPipeline.java:484) at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base.1/AbstractPipeline.java:474) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(java.base.1/ForEachOps.java:150) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(java.base.1/ForEachOps.java:173) at java.util.stream.AbstractPipeline.evaluate(java.base.1/AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(java.base.1/ReferencePipeline.java:497) at java.lang.management.ManagementFactory.getPlatformMBeanServer(java.management.1/ManagementFactory.java:488) - locked <0x000000071c61e488> (a java.lang.Class for java.lang.management.ManagementFactory) at TestDiagnosticCommandImpl.main(TestDiagnosticCommandImpl.java:3) WARNING: JNI local refs: 759, exceeds capacity: 758 ~~ Version-Release number of selected component (if applicable): How reproducible: Always Steps to Reproduce: 1. public class TestDiagnosticCommandImpl { public static void main(String[] args) { System.out.println(java.lang.management.ManagementFactory.getPlatformMBeanServer()); } } 2. run with -Xcheck:jni Actual results: Several warnings when using ManagementFactory Expected results: Less warnings - maybe even none warning Additional info: Attach the reproducer and the output