【问题标题】:Tomcat 9 memory leak with PoolingHttpClientConnectionManager and NioEndpointTomcat 9 内存泄漏与 PoolingHttpClientConnectionManager 和 NioEndpoint
【发布时间】:2022-01-13 23:17:12
【问题描述】:

我正在尝试在 kubernetes pod 中分析我的系统中的 cpu 和内存峰值。运行负载测试后,当内存使用率没有下降时,我进行了堆转储并使用 MAT 进行分析。

我是这个代码库的新手。据我所知,它使用 PoolingHttpClientConnectionManager,它使用 NioEndpoint 建立连接池。使用 FeignClient,后者又使用 ApacheHttpClient,后者使用 HttpClient 和连接管理器设置。我看到线程正在堆积,我不知道为什么。非常感谢您提供任何帮助。

【问题讨论】:

    标签: multithreading tomcat threadpool tomcat9 apache-httpclient-5.x


    【解决方案1】:

    PoolingHttpClientConnectionManager(来自Apache HttpComponents)不使用NioEndpoint(来自Tomcat),它只能用于传入连接(HTTP 服务器套接字)。

    您观察到的 500 个 SecureNioChannel 实例是一个缓冲区池,可同时为多达 500 个 TLS 连接提供服务。它们不是泄漏,而是一种减少处理请求所需的垃圾收集量的功能。

    您可以通过几个连接器选项来控制这个池(参见documentation):

    • socket.bufferPool 配置池的大小。如果设置为0,则不会创建缓存(但每个请求都会创建一个新的SecureNioChannel对象),
    • socket.appReadBufSizesocket.appWriteBufSize 配置每个缓冲区的大小。 SecureNioChannel 使用每种类型的两个缓冲区。

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2014-12-25
      • 2015-12-27
      • 1970-01-01
      • 2012-08-20
      • 2012-08-06
      • 2013-07-29
      • 2015-06-04
      • 2014-04-03
      相关资源
      最近更新 更多