Uso de memória do Tomcat VIRT

2

Ontem postei esta pergunta: Consumo Excessivo de Memória do Tomcat

O segmento estava ficando muito longo e detalhado para que alguém continuasse ajudando. Então agora estou fazendo uma pergunta mais específica.

Quando executo top , obtenho isto:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13749 tomcat6   20   0  493m  82m 9972 S    0  9.0   0:07.34 java

Esta é uma nova instalação do Tomcat6 no Ubuntu 11.04 (Nattty) (64 bits).

Pelo que entendi, a VIRT é a memória virtual. O valor de 493m na coluna VIRT é "normal" ou é excessivamente alto? Lembre-se de que não há aplicativos da Web em execução no Tomcat agora. É apenas a instalação básica da baunilha.

E os 82m na coluna RES? O que isso significa e como ele se compara ao VIRT? Essa é a quantidade de memória que eu esperaria que o Tomcat usasse.

Minha empresa de hospedagem está usando o Parallels Virtuozzo Containers e, aparentemente, as estatísticas sobre o uso da memória estão disponíveis em algum lugar. As estatísticas mostram que estou usando 110% do meu limite de memória de 512MB (burstable). Então, na verdade, eles estão contando entre 400 e 500 MB de memória do Tomcat.

    
por Tanner 02.08.2011 / 16:27

4 respostas

1

Estou na mesma situação que você: Servidor virtual hospedado com os contêineres Parallels Virtuozzo.

Eu tenho o Debian 6 e o Tomcat 7 instalados, executando os aplicativos padrão e dois adicionais pequenos. A configuração do Tomcat 7 é levemente alterada, mas ainda é muito parecida com a configuração padrão:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29910 tomcat    18   0  525m  80m 9972 S  0.0  7.9   0:13.26 java 

Então parece bastante normal. Eu suponho que você já sabe como limitar o uso de memória para o Tomcat usando JAVA_OPTS = '- Xms256m -Xmx256m'?

Eu não tenho certeza de como você está familiarizado com o Tomcat, pessoalmente eu sempre achei esse FAQ útil: link link

Atenciosamente, Claude

    
por 10.08.2011 / 18:27
1

O Jvm é um ambiente com muita memória e os 512megs provavelmente são muito baixos para o sistema operacional, além de um jvm que executa um aplicativo de tamanho médio. Além disso, se você estiver visando um consumo de memória tão baixo, deverá usar uma versão de 32 bits do sistema operacional e do JRE. Você também pode tentar um contêiner de menor pegada, como o Jetty.

    
por 10.08.2011 / 17:11
0

RES = RES ident Tamanho (quanto do seu programa está na RAM física real.
VIRT = VIRT Memory Footprint (quanto memória virtual, RAM + Swap, seu programa alocou).

Isso é normal? Talvez, talvez não. Reinicie o tomcat. O tamanho VIRTual é substancialmente menor? Cresce com o tempo? Em caso afirmativo, você tem um vazamento de memória (no Tomcat ou no seu aplicativo). Você pode lidar com isso cavando o código para encontrar o vazamento ou agendando reinicializações periódicas. O primeiro é o caminho CERTO, o último o caminho RÁPIDO.

Se o tamanho virtual do seu processo tomcat for o mesmo depois de um reinício, ou se crescer para um ponto fixo e não aumentar, você não terá um vazamento clássico de memória: seu aplicativo simplesmente gosta de usar muito de memória.
Você pode refatorar o uso de menos memória ou atualizar seu plano de hospedagem para permitir que você use mais memória sem ultrapassar seu limite.

Como você diz que não há aplicativos sendo executados no Tomcat agora, isso pode ser a quantidade padrão de memória que o Java pega para o heap da JVM na inicialização. Esse tamanho é configurável (via parâmetros Java. Veja o guia do usuário do Tomcat e outros docs para informações).

    
por 02.08.2011 / 17:53
0

Eu recentemente tenho o VPS com 392MB e instalei o Ubuntu 10.04 + Sun JDK 6 + vanilla Tomcat 6.0.32.

Eu também fiquei surpreso quando vi que a instalação padrão do Tomcat consome 384-400 MB

root@mybox:# top | grep java
32321 root      18   0  384m 121m 9996 S  0.0 31.7   0:12.24 java

O script a seguir determina a memória real que o VPS está usando e provou que estou ficando sem meus 392Mb

#!/bin/bash
bean='cat /proc/user_beancounters'
guar='echo "$bean" | grep vmguar | awk '{ print $4;}''
burst='echo "$bean" | grep privvm | awk '{ print $5;}''
priv='echo "$bean" | grep privvm | awk '{ print $2;}''
let total=guar/256
let used=priv/256
let burst=burst/256
echo "VPS memory usage:"
echo "Used: $used MB"
echo "Total: $total MB"
echo "Burstable to: $burst MB"

Eu coloquei JAVA_OPTS = '- Xms128m -Xmx192m' no / etc / environment, mas isso não ajudou.

Eu comecei a procurar no Google uma solução e encontrei o seu post, então pelo menos eu não estou sozinho.

Meu aplicativo j2ee usa o openJPA, que também consome memória, então acho que precisarei de mais 256 MB.

    
por 11.08.2011 / 23:29