Eu quero limitar a memória máxima usada pela JVM. Observe que este não é apenas o heap, quero limitar a memória total usada por esse processo.
java
memory
memory-management
memory-leaks
profiling
erotsppa
fonte
fonte
-Xmx524M
e o processo ocupa 1,2 GB de RAM. (?)Você não precisa se preocupar com o vazamento de memória da pilha (é altamente incomum). O único momento em que você pode deixar a pilha fora de controle é com recursão infinita (ou realmente profunda).
Esta é apenas a pilha. Desculpe, não li sua pergunta completamente no começo.
Você precisa executar a JVM com o seguinte argumento da linha de comandos.
Exemplo:
Isso permitirá um máximo de 1 GB de memória para a JVM.
fonte
-XX:MaxDirectMemorySize
. Não que eu tenha perfilado fortemente para ter certeza, mas ainda;)MaxDirectMemorySize
único afeta os buffers NIO. Todos os tipos de outras memórias nativas são usadas pela JVM.Se você deseja limitar a memória para jvm (não o tamanho do heap) ulimit -v
Para ter uma idéia da diferença entre jvm e memória heap, dê uma olhada neste excelente artigo http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
fonte
ulimit
um comando do Linux? Fiz uma pesquisa rápida no Google e não vi nenhuma relação entreulimit
e a JVM. YA resposta acima é do tipo correta, você não pode controlar normalmente quanta memória nativa um processo java aloca. Depende do que seu aplicativo está fazendo.
Dito isto, dependendo da plataforma, você poderá usar algum mecanismo, por exemplo, ulimit, para limitar o tamanho de um java ou qualquer outro processo.
Só não espere que falhe normalmente se atingir esse limite. As falhas de alocação de memória nativa são muito mais difíceis de tratar do que as falhas de alocação no heap java. Há uma chance razoavelmente boa de o aplicativo travar, mas dependendo de quão crítico é para o sistema manter o tamanho do processo baixo, o que pode ser útil para você.
fonte
Eu nunca usei isso. Talvez você ache útil.
fonte