Skip to content

AutoConfiguredCompositeMeterRegistry consuming up to 90% of the Heap - Webclient | Actuator - Memory leak #38912

@VitorNilson

Description

@VitorNilson

Problem:

I have a Java 11 + Spring Boot 2.7.14 application that acts like a proxy between an user and a service. It's currently receiving up to 200 million requests per month.

I have actuator only for Health checks, all application performance monitoring is with open telemetry.

I am currently facing a problem where org.springframework.boot.actuate.autoconfigure.metrics.AutoConfiguredCompositeMeterRegistry is ocuppying up to 90% of my JVM heap, meaning that I'm using more memory to a metric that I don't use, than to handle requests.

image

image

My code

This is the piece of code where the proxy requests happens:

@Service
@AllArgsConstructor
public class ProxyRequestService {
    private WebClient webClient;

    public Mono<Object> request(Object body, String uri, TokenDTO token, Map<String, String> httpHeaders) {

        return webClient.post()
                .uri(token.getUrl() + uri)
                .headers(headers -> headers.setAll(httpHeaders))
                .bodyValue(body != null ? body :  "").exchangeToMono(response -> response.bodyToMono(byte[].class));
    }

}

And this is my dependencies tree:

-----------------------------------------------------------
Root project 'orchestrator-api' - orchestrator-api
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok -> 1.18.28

bootArchives - Configuration for Spring Boot archive artifacts. (n)
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- org.projectlombok:lombok -> 1.18.28
+--- org.springframework.boot:spring-boot-starter-actuator -> 2.7.14
|    +--- org.springframework.boot:spring-boot-starter:2.7.14
|    |    +--- org.springframework.boot:spring-boot:2.7.14
|    |    |    +--- org.springframework:spring-core:5.3.29
|    |    |    |    \--- org.springframework:spring-jcl:5.3.29
|    |    |    \--- org.springframework:spring-context:5.3.29
|    |    |         +--- org.springframework:spring-aop:5.3.29
|    |    |         |    +--- org.springframework:spring-beans:5.3.29
|    |    |         |    |    \--- org.springframework:spring-core:5.3.29 (*)
|    |    |         |    \--- org.springframework:spring-core:5.3.29 (*)
|    |    |         +--- org.springframework:spring-beans:5.3.29 (*)
|    |    |         +--- org.springframework:spring-core:5.3.29 (*)
|    |    |         \--- org.springframework:spring-expression:5.3.29
|    |    |              \--- org.springframework:spring-core:5.3.29 (*)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:2.7.14
|    |    |    \--- org.springframework.boot:spring-boot:2.7.14 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.7.14
|    |    |    +--- ch.qos.logback:logback-classic:1.2.12
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.12
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |    +--- org.springframework:spring-core:5.3.29 (*)
|    |    \--- org.yaml:snakeyaml:1.30
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.14
|    |    +--- org.springframework.boot:spring-boot-actuator:2.7.14
|    |    |    \--- org.springframework.boot:spring-boot:2.7.14 (*)
|    |    +--- org.springframework.boot:spring-boot:2.7.14 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:2.7.14 (*)
|    \--- io.micrometer:micrometer-core:1.9.13
|         \--- org.hdrhistogram:HdrHistogram:2.1.12
+--- org.springframework.boot:spring-boot-starter-cache -> 2.7.14
|    +--- org.springframework.boot:spring-boot-starter:2.7.14 (*)
|    \--- org.springframework:spring-context-support:5.3.29
|         +--- org.springframework:spring-beans:5.3.29 (*)
|         +--- org.springframework:spring-context:5.3.29 (*)
|         \--- org.springframework:spring-core:5.3.29 (*)
+--- org.springframework.boot:spring-boot-starter-web -> 2.7.14
|    +--- org.springframework.boot:spring-boot-starter:2.7.14 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:2.7.14
|    |    +--- org.springframework.boot:spring-boot-starter:2.7.14 (*)
|    |    +--- org.springframework:spring-web:5.3.29
|    |    |    +--- org.springframework:spring-beans:5.3.29 (*)
|    |    |    \--- org.springframework:spring-core:5.3.29 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.13.5
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.13.5
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.13.5
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.5 -> 2.9.0 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.13.5 (c)
|    |    |    |         +--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5 (c)
|    |    |    |         \--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.13.5
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.13.5 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:2.7.14
|    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:9.0.78
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:9.0.78
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:9.0.78
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:9.0.78
|    +--- org.springframework:spring-web:5.3.29 (*)
|    \--- org.springframework:spring-webmvc:5.3.29
|         +--- org.springframework:spring-aop:5.3.29 (*)
|         +--- org.springframework:spring-beans:5.3.29 (*)
|         +--- org.springframework:spring-context:5.3.29 (*)
|         +--- org.springframework:spring-core:5.3.29 (*)
|         +--- org.springframework:spring-expression:5.3.29 (*)
|         \--- org.springframework:spring-web:5.3.29 (*)
+--- org.springframework.boot:spring-boot-starter-webflux -> 2.7.14
|    +--- org.springframework.boot:spring-boot-starter:2.7.14 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:2.7.14 (*)
|    +--- org.springframework.boot:spring-boot-starter-reactor-netty:2.7.14
|    |    \--- io.projectreactor.netty:reactor-netty-http:1.0.34
|    |         +--- io.netty:netty-codec-http:4.1.94.Final
|    |         |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-buffer:4.1.94.Final
|    |         |    |    \--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-transport:4.1.94.Final
|    |         |    |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    |    \--- io.netty:netty-resolver:4.1.94.Final
|    |         |    |         \--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-codec:4.1.94.Final
|    |         |    |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    |    \--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    \--- io.netty:netty-handler:4.1.94.Final
|    |         |         +--- io.netty:netty-common:4.1.94.Final
|    |         |         +--- io.netty:netty-resolver:4.1.94.Final (*)
|    |         |         +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |         +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |         +--- io.netty:netty-transport-native-unix-common:4.1.94.Final
|    |         |         |    +--- io.netty:netty-common:4.1.94.Final
|    |         |         |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |         |    \--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |         \--- io.netty:netty-codec:4.1.94.Final (*)
|    |         +--- io.netty:netty-codec-http2:4.1.94.Final
|    |         |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-codec:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-handler:4.1.94.Final (*)
|    |         |    \--- io.netty:netty-codec-http:4.1.94.Final (*)
|    |         +--- io.netty:netty-resolver-dns:4.1.94.Final
|    |         |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-resolver:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-codec:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-codec-dns:4.1.94.Final
|    |         |    |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    |    \--- io.netty:netty-codec:4.1.94.Final (*)
|    |         |    \--- io.netty:netty-handler:4.1.94.Final (*)
|    |         +--- io.netty:netty-resolver-dns-native-macos:4.1.94.Final
|    |         |    \--- io.netty:netty-resolver-dns-classes-macos:4.1.94.Final
|    |         |         +--- io.netty:netty-common:4.1.94.Final
|    |         |         +--- io.netty:netty-resolver-dns:4.1.94.Final (*)
|    |         |         \--- io.netty:netty-transport-native-unix-common:4.1.94.Final (*)
|    |         +--- io.netty:netty-transport-native-epoll:4.1.94.Final
|    |         |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-transport-native-unix-common:4.1.94.Final (*)
|    |         |    \--- io.netty:netty-transport-classes-epoll:4.1.94.Final
|    |         |         +--- io.netty:netty-common:4.1.94.Final
|    |         |         +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |         +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |         \--- io.netty:netty-transport-native-unix-common:4.1.94.Final (*)
|    |         +--- io.projectreactor.netty:reactor-netty-core:1.0.34
|    |         |    +--- io.netty:netty-handler:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-handler-proxy:4.1.94.Final
|    |         |    |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    |    +--- io.netty:netty-codec:4.1.94.Final (*)
|    |         |    |    +--- io.netty:netty-codec-socks:4.1.94.Final
|    |         |    |    |    +--- io.netty:netty-common:4.1.94.Final
|    |         |    |    |    +--- io.netty:netty-buffer:4.1.94.Final (*)
|    |         |    |    |    +--- io.netty:netty-transport:4.1.94.Final (*)
|    |         |    |    |    \--- io.netty:netty-codec:4.1.94.Final (*)
|    |         |    |    \--- io.netty:netty-codec-http:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-resolver-dns:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-resolver-dns-native-macos:4.1.94.Final (*)
|    |         |    +--- io.netty:netty-transport-native-epoll:4.1.94.Final (*)
|    |         |    \--- io.projectreactor:reactor-core:3.4.31
|    |         |         \--- org.reactivestreams:reactive-streams:1.0.4
|    |         \--- io.projectreactor:reactor-core:3.4.31 (*)
|    +--- org.springframework:spring-web:5.3.29 (*)
|    \--- org.springframework:spring-webflux:5.3.29
|         +--- org.springframework:spring-beans:5.3.29 (*)
|         +--- org.springframework:spring-core:5.3.29 (*)
|         +--- org.springframework:spring-web:5.3.29 (*)
|         \--- io.projectreactor:reactor-core:3.4.31 (*)
+--- org.springdoc:springdoc-openapi-ui:1.6.14
|    +--- org.springdoc:springdoc-openapi-webmvc-core:1.6.14
|    |    +--- org.springdoc:springdoc-openapi-common:1.6.14
|    |    |    +--- org.springframework.boot:spring-boot-autoconfigure:2.7.6 -> 2.7.14 (*)
|    |    |    +--- org.springframework:spring-web:5.3.24 -> 5.3.29 (*)
|    |    |    \--- io.swagger.core.v3:swagger-core:2.2.7
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.2 -> 2.3.3
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:1.2.2
|    |    |         +--- org.apache.commons:commons-lang3:3.12.0
|    |    |         +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.14.0 -> 2.13.5 (*)
|    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.14.0 -> 2.13.5 (*)
|    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.0 -> 2.13.5
|    |    |         |    +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (*)
|    |    |         |    +--- org.yaml:snakeyaml:1.31 -> 1.30
|    |    |         |    +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (*)
|    |    |         |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
|    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.0 -> 2.13.5 (*)
|    |    |         +--- io.swagger.core.v3:swagger-annotations:2.2.7
|    |    |         +--- org.yaml:snakeyaml:1.33 -> 1.30
|    |    |         +--- io.swagger.core.v3:swagger-models:2.2.7
|    |    |         |    \--- com.fasterxml.jackson.core:jackson-annotations:2.14.0 -> 2.13.5 (*)
|    |    |         \--- jakarta.validation:jakarta.validation-api:2.0.2
|    |    \--- org.springframework:spring-webmvc:5.3.24 -> 5.3.29 (*)
|    +--- org.webjars:swagger-ui:4.15.5
|    +--- org.webjars:webjars-locator-core:0.52 -> 0.50
|    |    +--- org.slf4j:slf4j-api:1.7.36
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.13.1 -> 2.13.5 (*)
|    \--- io.github.classgraph:classgraph:4.8.149
+--- a.private.dependencie:gateway-auth-lib:master
|    +--- io.jsonwebtoken:jjwt-api:0.11.5
|    +--- io.jsonwebtoken:jjwt-impl:0.11.5
|    \--- io.jsonwebtoken:jjwt-jackson:0.11.5
+--- org.jetbrains:annotations:24.1.0
+--- com.google.code.gson:gson:2.8.9
+--- net.minidev:json-smart:2.4.7
|    \--- net.minidev:accessors-smart:2.4.7
|         \--- org.ow2.asm:asm:9.1
\--- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.0
     +--- com.fasterxml.jackson.core:jackson-core:2.9.0 -> 2.13.5 (*)
     +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.13.5 (*)
     +--- com.fasterxml.jackson.core:jackson-databind:2.9.0 -> 2.13.5 (*)
     +--- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.0 -> 2.13.5
     |    +--- com.fasterxml.jackson.core:jackson-annotations:2.13.5 (*)
     |    +--- com.fasterxml.jackson.core:jackson-core:2.13.5 (*)
     |    +--- com.fasterxml.jackson.core:jackson-databind:2.13.5 (*)
     |    +--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 (*)
     |    +--- jakarta.activation:jakarta.activation-api:1.2.1 -> 1.2.2
     |    \--- com.fasterxml.jackson:jackson-bom:2.13.5 (*)
     +--- org.codehaus.woodstox:stax2-api:3.1.4
     \--- com.fasterxml.woodstox:woodstox-core:5.0.3
          \--- org.codehaus.woodstox:stax2-api:3.1.4

No, the application is not entire Reactive. We are only using Webclient. The application Runs with starter-web.

What I have tried:

The piece of code that I showed you is already my final version. It was previously like this:


    public Mono<Object> request(Object body, String uri, TokenDTO token, Map<String, String> httpHeaders) {

        return webClient.post()
               .uri(URI.create(token.getUrl() + uri)) // I changed it. Removed URI.create.
                .headers(headers -> headers.setAll(httpHeaders))
                .bodyValue(body != null ? body :  "").exchangeToMono(response -> response.bodyToMono(byte[].class));
    }

I also added a configuration on my application.yaml:

management:
  metrics:
    enable:
      http:
        client:
          metrics: false

Conclusion

Is there a correct way to remove this type of metric?

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: invalidAn issue that we don't feel is valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions