Como você diagnosticaria um vazamento de memória num serviço JVM de longa duração?
Primeiro confirme que é mesmo um vazamento: observe o heap depois de um GC completo por horas, já que um dente de serra que volta à baseline não é um vazamento. Depois tire um heap dump e abra no MAT, que mostra a dominator tree — os objetos que retêm mais memória e quem os referencia. As respostas mais comuns são um cache sem limite, um ThreadLocal nunca limpo numa thread de pool, ou listeners que se registram e nunca se desregistram.