java - TCPTransportConnection 内存泄漏

标签 java performance memory memory-leaks apache-camel

我正在对我的应用超时内存泄漏进行故障排除。我启动我的应用程序并将其放置几天,没有发送任何请求。

应用程序是一个简单的应用程序,它有一些引发的 CFX 端点和监听它们的 Camel 路由。

当我启动应用程序时,堆快速增长并达到最大值,约为 300 Mb。

enter image description here

几天后,堆平均大小约为 500 Mb,最大约为 750 Mb。

这是分析结果:

enter image description here

我查看了大量幸存对象的堆栈跟踪:

enter image description here

所有这些都导致 TCPTransport.ConnectionHandler 或其共同封装类。

使用的库版本和pom:

Java 8 (1.8.0_172)

<properties>
    <fabric8.version>2.3.7.fuse-000036-redhat-2</fabric8.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.fabric8</groupId>
            <artifactId>fabric8-project-bom-camel-spring-boot</artifactId>
            <version>${fabric8.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>

    <!-- CAMEL dependency -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servlet-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-swagger-java-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jackson</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-cxf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-http</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
</dependencies>

这是 cfx-enpoint 配置:

   <cxf:cxfEndpoint address="/{{cxf.version}}/MyService"
       endpointName="a:MyServicePort" id="MyService"
       serviceClass="mypackage.here"
       serviceName="a:MyService"
       wsdlURL="my.wsdl" xmlns:a="http://localhost/v1/MyService">
       <cxf:inInterceptors>
           <ref bean="wssSecurityInterceptor"/>
       </cxf:inInterceptors>
   </cxf:cxfEndpoint>

有人知道内存泄漏在哪里吗?

最佳答案

确实看到了同样的问题,恢复到 tomcat。切换到 G1 有一点帮助,但它在 GC 的某些时间间隔减慢了事务响应时间。

关于java - TCPTransportConnection 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736798/

相关文章:

c - c 中这个简单的 printf 输出背后的真正含义是什么?

c++ - 为什么 GNU ld 在内存中留下一个洞?

java - 在类似图形的对象中查找循环

php - 类型提示是否有助于提高 PHP 脚本的性能?

java - 为什么我使用 datainputstream、java、android 时会得到 0kb 文件?

c++ - 为什么使用 'if' 语句可以提供更好的性能?

c++ - 像 C++ 一样编写高效的实体系统

c - 适当的内存分配

java - 基本Android项目: alternating cannot be resolved or is not a field/R cannot be resolved into a variable errors

java - 读取整数和 double 后如何读取整个字符串?