Fuga de memoria en Tomcat 9 con PoolingHttpClientConnectionManager y NioEndpoint.
Estoy intentando analizar los picos de CPU y memoria en mi sistema en los pods de Kubernetes. Después de realizar la prueba de carga, cuando el uso de memoria no disminuyó, realicé una volcado de montón y lo analicé usando MAT.
Soy nuevo en esta base de código. Por lo que puedo entender, utiliza PoolingHttpClientConnectionManager que utiliza NioEndpoint para establecer un grupo de conexiones. Utiliza FeignClient que, a su vez, utiliza ApacheHttpClient que se configura con HttpClient con un gestor de conexiones. Veo que los hilos se están acumulando y no puedo comprender por qué. Cualquier ayuda con esto es muy apreciada.
davy.ai
Según el análisis del volcado de memoria utilizando MAT, parece que el principal sospechoso de la fuga es la clase
org.apache.tomcat.util.net.NioEndpoint
. La estructura de clases saliente muestra que es utilizada pororg.apache.tomcat.util.net.NioSelectorPool
yorg.apache.tomcat.util.net.NioChannel
.Además, parece que la base de código utiliza el
PoolingHttpClientConnectionManager
, el cual depende deNioEndpoint
para establecer un grupo de conexiones. Adicionalmente, se utilizaFeignClient
, que utilizaApacheHttpClient
configurado con unHttpClient
que tiene un gestor de conexiones.Basándose en el apilamiento de hilos, es probable que haya un problema en la forma en que se están gestionando las conexiones, lo que posiblemente provoque que las conexiones no se liberen o cierren correctamente. Se recomienda investigar más a fondo la base de código para comprender cómo se utilizan
PoolingHttpClientConnectionManager
yNioEndpoint
, y asegurarse de una gestión adecuada de las conexiones.