{"record":{"id":"cea0381ac652508c","repo":"pinpoint-apm/pinpoint","slug":"expected-method-not-found-for-retrieving-jvm-cpu-u-cea038","errorCode":null,"errorMessage":"Expected method not found for retrieving jvm cpu usage. Cause : {}","messagePattern":"Expected method not found for retrieving jvm cpu usage\\. Cause : (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"agent-module/profiler-optional/profiler-optional-jdk8/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/cpu/oracle/DefaultCpuLoadMetric.java","lineNumber":48,"sourceCode":" */\npublic class DefaultCpuLoadMetric implements CpuLoadMetric {\n\n    private final Logger logger = LogManager.getLogger(this.getClass());\n\n    private final CpuUsageProvider jvmCpuUsageProvider;\n    private final CpuUsageProvider systemCpuUsageProvider;\n\n    public DefaultCpuLoadMetric() {\n        final OperatingSystemMXBean operatingSystemMXBean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();\n        if (operatingSystemMXBean == null) {\n            throw new IllegalStateException(\"OperatingSystemMXBean not available\");\n        }\n\n        CpuUsageProvider jvmCpuUsageProvider = new JvmCpuUsageProvider(operatingSystemMXBean);\n        try {\n            jvmCpuUsageProvider.getCpuUsage();\n        } catch (NoSuchMethodError e) {\n            logger.warn(\"Expected method not found for retrieving jvm cpu usage. Cause : {}\", e.getMessage());\n            jvmCpuUsageProvider = CpuUsageProvider.UNSUPPORTED;\n        }\n        this.jvmCpuUsageProvider = jvmCpuUsageProvider;\n\n        CpuUsageProvider systemCpuUsageProvider = new SystemCpuUsageProvider(operatingSystemMXBean);\n        try {\n            systemCpuUsageProvider.getCpuUsage();\n        } catch (NoSuchMethodError e) {\n            logger.warn(\"Expected method not found for retrieving system cpu usage. Cause : {}\", e.getMessage());\n            systemCpuUsageProvider = CpuUsageProvider.UNSUPPORTED;\n        }\n        this.systemCpuUsageProvider = systemCpuUsageProvider;\n    }\n\n    @Override\n    public CpuLoadMetricSnapshot getSnapshot() {\n        double jvmCpuUsage = jvmCpuUsageProvider.getCpuUsage();\n        double systemCpuUsage = systemCpuUsageProvider.getCpuUsage();","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler-optional/profiler-optional-jdk8/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/cpu/oracle/DefaultCpuLoadMetric.java#L30-L66","documentation":"Oracle/HotSpot variant of DefaultCpuLoadMetric performing the same construction-time probe of the JvmCpuUsageProvider. On NoSuchMethodError it warns 'Expected method not found for retrieving jvm cpu usage' and swaps in CpuUsageProvider.UNSUPPORTED, degrading JVM CPU metrics to null instead of failing agent startup.","triggerScenarios":"Constructing the oracle DefaultCpuLoadMetric on a JVM whose com.sun.management.OperatingSystemMXBean lacks getProcessCpuLoad — typically a non-Sun/Oracle JVM (J9, JRockit) or very old JDK 6 without the method.","commonSituations":"Running the agent on IBM J9 while the Oracle metric implementation was selected; minimal/trimmed JRE; JDK version where the com.sun API is unavailable or restricted (e.g. security policy blocking com.sun).","solutions":["Run on a HotSpot/OpenJDK JDK 7+ where getProcessCpuLoad exists","Use the IBM metric variant (ibm package) when on J9/JRockit","Accept degraded metrics — the warning means jvm CPU will be unsupported, agent still works","Check JVM flags/security policy if com.sun.management access is blocked"],"exampleFix":"// before (Oracle variant on J9 JVM)\nnew com.navercorp.pinpoint.profiler.monitor.metric.cpu.oracle.DefaultCpuLoadMetric(osBean);\n// after (vendor-aware selection)\nif (vendor.contains(\"IBM\")) { metric = new ...ibm.DefaultCpuLoadMetric(osBean); } else { metric = new ...oracle.DefaultCpuLoadMetric(osBean); }","handlingStrategy":"fallback","validationCode":"java.lang.management.OperatingSystemMXBean bean = ManagementFactory.getOperatingSystemMXBean(); boolean supportsJvmCpu = (bean instanceof com.sun.management.OperatingSystemMXBean); if (!supportsJvmCpu) use ibm variant or skip;","typeGuard":"boolean isSunOsBean(java.lang.management.OperatingSystemMXBean b) { return b instanceof com.sun.management.OperatingSystemMXBean; }","tryCatchPattern":"try { jvmProvider.getCpuUsage(); } catch (NoSuchMethodError e) { jvmProvider = CpuUsageProvider.UNSUPPORTED; }","preventionTips":["Run the agent on HotSpot/OpenJDK JDK 7+ for the oracle metric package","Use the ibm metric package on J9/JRockit JVMs","Ensure security policy permits access to com.sun.management MXBeans","Rely on the probe-and-degrade pattern: unsupported CPU metric is non-fatal"],"tags":["jvm","monitoring","cpu-metrics","oracle","hotspot","nosuchmethod"],"backgroundTag":"unsupported-platform","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}