Consumo de memória da JVM

9

Estou tentando executar o tomcat em um sistema com pouca memória (150-256Mb). Mesmo que eu inicie a JVM com -Xmx64m (que deve ser o padrão de qualquer maneira), o processo ocupa imediatamente 200Mb +.

Eu me pergunto por que a JVM precisa de muita memória, ou se há uma maneira de sintonizar isso? Outras JVMs são melhores que as do sol para baixo consumo de memória - e elas funcionam com o tomcat?

    
por Draemon 23.05.2009 / 20:17

4 respostas

5

Além do heap (especificado por -Xms e -Xmx ), é necessário incluir as áreas não heap. Estes incluem

  • O Perm Gen, que é 64mb em sistemas de 32 bits, e 96mb em sistemas de 64 bits inicialmente
  • O cache de código, que está entre 20 e 40mb, dependendo da JVM
  • A área de buffer do NIO (na qual DirectByteBuffer s é extraída) é inicialmente 64mb

Há também o espaço de trabalho da própria JVM, que será algumas dezenas de mb.

Você também deve estar ciente do dimensionamento automático de Sun JVM ao usar uma máquina de classe de servidor . Com o tempo, a definição da classe do servidor (memória de 2 Gb, mais de um núcleo) sofreu alguma depreciação e agora a maioria das máquinas é capaz de acionar as -server otimizações. Meu conselho é sempre especificar as configurações -Xms e -Xmx e passar -server , a menos que você não consiga pensar em uma boa razão também.

    
por 26.05.2009 / 13:40
3

Com a opção -Xmx, você restringe o tamanho do heap que a JVM reserva ... Existem recursos adicionais que a JVM precisa ...

"Obrigado pela memória" * é um bom artigo que explica como uma JVM usa memória ...

Além disso, você pode tentar a JVM da IBM, ela deve funcionar com o Tomcat, não sei se algumas das implementações da JVM livre funcionam.

No entanto, eu não acho que uma máquina com memória tão baixa, faça bem a você. Java só precisa de memória.

* Como novos usuários não podem enviar hiperlinks, você tem que procurar por esse artigo você mesmo ... é o primeiro sucesso no google por "obrigado pela memória ibm".

    
por 26.05.2009 / 13:20
2

Tente também a JVM JRockit, que possui menos espaço de memória. Você ainda pode baixar gratuitamente as versões do JRockit licenciadas pela BEA. ou seja, versões anteriores ao Oracle assumiram o controle da BEA.

Veja o link para links de download.

    
por 19.06.2009 / 15:26
0

Uma técnica útil que eu encontrei é usar o monitoramento JMX para ver exatamente quanto de memória é usada pelo espaço heap vs permgen.

Configure o JMX no Tomcat conforme descrito aqui link

Em seguida, use o JConsole (vem com o JDK 5 ou JDK 6) - a tag de memória rastreará o consumo de memória ao longo do tempo.

Além disso, tenha cuidado com reinicializações suaves de aplicativos da Web. Se você recarregar um webapp, o espaço permgen não será coletado e será acumulado ao longo do tempo. Você precisa fazer um ponto final / início do Tomcat para recuperar o espaço do permgen.

    
por 19.07.2009 / 06:42