0

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

传出类结构

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

4

1 回答 1

1

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

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

您可以通过几个连接器选项控制此池(参见文档):

  • socket.bufferPool配置池的大小。如果将其设置为0,则不会创建缓存(但每个请求都会创建一个新SecureNioChannel对象),
  • socket.appReadBufSizesocket.appWriteBufSize配置每个缓冲区的大小。ASecureNioChannel使用每种类型的两个缓冲区。
于 2021-12-09T10:03:16.783 回答