{"record":{"id":"8b1124869daee00a","repo":"pinpoint-apm/pinpoint","slug":"expected-method-not-found-for-retrieving-system-cp-8b1124","errorCode":null,"errorMessage":"Expected method not found for retrieving system cpu usage. Cause : {}","messagePattern":"Expected method not found for retrieving system 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":57,"sourceCode":"        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();\n        return new CpuLoadMetricSnapshot(jvmCpuUsage, systemCpuUsage);\n    }\n\n    @Override\n    public String toString() {\n        return \"CpuLoadMetric for Oracle Java 1.7+\";\n    }\n\n    private static class JvmCpuUsageProvider implements CpuUsageProvider {","sourceCodeStart":39,"sourceCodeEnd":75,"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#L39-L75","documentation":"DefaultCpuLoadMetric probes SystemCpuUsageProvider.getCpuUsage() once at construction; on JDK 8 (and on some JVMs like older IBM/Oracle builds) OperatingSystemMXBean lacks the getSystemCpuLoad/com.sun.management method the provider expects, so a NoSuchMethodError is thrown. The metric logs this warning once and degrades the provider to CpuUsageProvider.UNSUPPORTED instead of failing startup. System CPU usage metrics will be absent, but JVM CPU metrics still work.","triggerScenarios":"Constructing DefaultCpuLoadMetric (via the CPU metric collector) on a JDK 8 JVM whose OperatingSystemMXBean implementation does not expose the system CPU usage method the provider binds to at runtime.","commonSituations":"Running the Pinpoint agent on JDK 8 with a non-HotSpot or old HotSpot build lacking com.sun.management.OperatingSystemMXBean.getSystemCpuLoad; containerized/minimal JRE distributions; reporting missing file.encoding/JMX implementations in some vendors' JDK 8 builds.","solutions":["Verify the JDK: check that com.sun.management.OperatingSystemMXBean has getSystemCpuLoad (java -version, run 'jcmd <pid> VM.system_properties' or inspect Class.getMethod in a scratch program)","Upgrade the JDK 8 to a recent HotSpot 8u release that implements getSystemCpuLoad","Ignore the warning if JVM-level CPU metrics suffice; the agent intentionally falls back to UNSUPPORTED and continues running","Ensure the agent is not running on an unsupported JVM vendor that Pinpoint does not list as supported for CPU metrics"],"exampleFix":"// before (agent behavior)\nCpuUsageProvider systemCpuUsageProvider = new SystemCpuUsageProvider(operatingSystemMXBean);\ntry { systemCpuUsageProvider.getCpuUsage(); }\ncatch (NoSuchMethodError e) { systemCpuUsageProvider = CpuUsageProvider.UNSUPPORTED; }\n// after (user-side guard: run on JDK8+ HotSpot that implements the method)\n// java version \"1.8.0_282\" (recent HotSpot 8u) instead of e.g. openjdk \"1.8.0_05\"","handlingStrategy":"fallback","validationCode":"// before enabling system CPU metrics on JDK8\nObject os = ManagementFactory.getOperatingSystemMXBean();\nboolean ok = os instanceof com.sun.management.OperatingSystemMXBean &&\n    ((com.sun.management.OperatingSystemMXBean) os).getSystemCpuLoad() >= 0.0;","typeGuard":"boolean supportsSystemCpuLoad(java.lang.management.OperatingSystemMXBean os) {\n  return os instanceof com.sun.management.OperatingSystemMXBean\n      && ((com.sun.management.OperatingSystemMXBean) os).getSystemCpuLoad() >= 0.0;\n}","tryCatchPattern":"try { usage = systemCpuUsageProvider.getCpuUsage(); }\ncatch (NoSuchMethodError e) { logger.warn(\"system cpu unsupported on this JVM\", e); usage = -1; }","preventionTips":["Run on a recent HotSpot 8u+ JDK that implements getSystemCpuLoad","Check JVM vendor support matrix before enabling CPU metrics","Treat this warning as informational: the agent degrades gracefully"],"tags":["jmx","jdk8","cpu-metrics","nosuchmethod","graceful-degradation"],"backgroundTag":"unsupported-operation","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}