Na maioria das vezes, em aplicativos corporativos, o heap Java fornecido é maior que o tamanho ideal de no máximo 12 a 16 GB. Acho difícil fazer com que o criador de perfil do NetBeans funcione diretamente nesses grandes aplicativos java.
Mas geralmente isso não é necessário. Você pode usar o utilitário jmap que acompanha o jdk para obter um despejo de pilha "ativo", ou seja, o jmap despeja a pilha após executar o GC. Faça alguma operação no aplicativo, aguarde até que a operação seja concluída e faça outro despejo de pilha "ativo". Use ferramentas como o Eclipse MAT para carregar os heapdumps, classificar no histograma, ver quais objetos aumentaram ou quais são os mais altos. Isso daria uma pista.
su proceeuser
/bin/jmap -dump:live,format=b,file=/tmp/2930javaheap.hrpof 2930(pid of process)
Há apenas um problema com essa abordagem; Enormes despejos de heap, mesmo com a opção ao vivo, podem ser grandes demais para serem transferidos para a volta do desenvolvimento e podem precisar de uma máquina com memória / RAM suficiente para abrir.
É aí que o histograma da classe entra em cena. Você pode despejar um histograma de classe ao vivo com a ferramenta jmap. Isso fornecerá apenas o histograma de classe do uso de memória. Basicamente, ele não terá informações para encadear a referência. Por exemplo, ele pode colocar a matriz de caracteres no topo. E classe String em algum lugar abaixo. Você tem que desenhar a conexão você mesmo.
jdk/jdk1.6.0_38/bin/jmap -histo:live 60030 > /tmp/60030istolive1330.txt
Em vez de pegar dois lixões de pilha, use dois histogramas de classe, como descrito acima; Em seguida, compare os histogramas de classe e veja as classes que estão aumentando. Veja se você pode relacionar as classes Java às suas classes de aplicativos. Isso dará uma boa dica. Aqui está um script pythons que pode ajudá-lo a comparar dois dumps do histograma jmap. histogramparser.py
Finalmente, ferramentas como JConolse e VisualVm são essenciais para ver o crescimento da memória ao longo do tempo e para ver se há um vazamento de memória. Finalmente, às vezes o problema pode não ser um vazamento de memória, mas um alto uso de memória. Para isso, habilite o log do GC; use um GC de compactação mais avançado e mais novo, como G1GC; e você pode usar ferramentas jdk como jstat para ver o comportamento do GC ao vivo
jstat -gccause pid <optional time interval>
Outras referências ao google para -jhat, jmap, GC completo, alocação humongous, G1GC