Description
Hi there,
with spring boot 3.4.6 (also verified with 3.5.0), I cannot instruct actuator to give me a heapdump when running in a Semeru (Openj9) runtime
I found these tickets that suggest that heapdumping did not always work but was added for openj9
To reproduce: use attached project (based on https://start.spring.io/#!type=maven-project&language=java&platformVersion=3.5.0&packaging=jar&jvmVersion=21&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=actuator,web)
mvn clean install
Then use your favorite tooling to run the image via the included Dockerfile
FROM ibm-semeru-runtimes:open-21.0.7_6-jdk-noble
COPY target/*.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
probe the container with
curl localhost:8080/actuator/threaddump
observer that no filestream is returned but instead you see following in the logs
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jun 16 11:17:31 UTC 2025
There was an unexpected error (type=Internal Server Error, status=500).
note ExtendedHotSpotDiagnostic
... at jdk.management/com.sun.management.internal.ExtendedHotSpotDiagnostic.dumpHeap(ExtendedHotSpotDiagnostic.java:60) ~[na:na]
2025-06-16T11:17:31.111Z ERROR 1 --- [demo] [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.UnsupportedOperationException] with root cause
2025-06-16T11:17:31.116198440Z
2025-06-16T11:17:31.116209107Z java.lang.UnsupportedOperationException: null
2025-06-16T11:17:31.116212607Z at jdk.management/com.sun.management.internal.ExtendedHotSpotDiagnostic.dumpHeap(ExtendedHotSpotDiagnostic.java:60) ~[na:na]
2025-06-16T11:17:31.116215524Z at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
2025-06-16T11:17:31.116218649Z at java.base/java.lang.reflect.Method.invoke(Method.java:586) ~[na:na]
2025-06-16T11:17:31.116221190Z at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281) ~[spring-core-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.116223607Z at org.springframework.boot.actuate.management.HeapDumpWebEndpoint$HotSpotDiagnosticMXBeanHeapDumper.dumpHeap(HeapDumpWebEndpoint.java:172) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.116226440Z at org.springframework.boot.actuate.management.HeapDumpWebEndpoint.dumpHeap(HeapDumpWebEndpoint.java:105) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.116228815Z at org.springframework.boot.actuate.management.HeapDumpWebEndpoint.heapDump(HeapDumpWebEndpoint.java:82) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.117094690Z at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
2025-06-16T11:17:31.117109107Z at java.base/java.lang.reflect.Method.invoke(Method.java:586) ~[na:na]
2025-06-16T11:17:31.117111524Z at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281) ~[spring-core-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117113565Z at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.117115607Z at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.117120232Z at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:327) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.117122399Z at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:434) ~[spring-boot-actuator-3.5.0.jar!/:3.5.0]
2025-06-16T11:17:31.117124357Z at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
2025-06-16T11:17:31.117126190Z at java.base/java.lang.reflect.Method.invoke(Method.java:586) ~[na:na]
2025-06-16T11:17:31.117127940Z at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117129899Z at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117132732Z at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117134607Z at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117136440Z at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117138357Z at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117140482Z at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117142690Z at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117148315Z at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117164857Z at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117168232Z at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117170440Z at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117172440Z at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117174149Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117175899Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117177857Z at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.41.jar!/:na]
2025-06-16T11:17:31.117179565Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117181357Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117183107Z at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117184815Z at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117186524Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117188274Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117189982Z at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117191774Z at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117193482Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117195690Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117197482Z at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117199274Z at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117200982Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117211649Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117214482Z at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117216274Z at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.7.jar!/:6.2.7]
2025-06-16T11:17:31.117217940Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117219607Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117221274Z at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117222940Z at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117224565Z at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117226232Z at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117227899Z at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117229524Z at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117231190Z at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117235607Z at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117237315Z at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117239024Z at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117240732Z at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117242399Z at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117244107Z at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117245940Z at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117247607Z at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.41.jar!/:na]
2025-06-16T11:17:31.117252524Z at java.base/java.lang.Thread.run(Thread.java:1595) ~[na:na]
2025-06-16T11:17:31.117255315Z
it appears that this block never throws the exception to then fallback to the OpenJ9 implementation