Tomcat 7 - vazamento de memória

9 respostas
aureliolima

Olá Pessoal,

Estou usando um Ubuntu 11.10 - 64bits e em um tomcat 7 com jdk 7 em um servidor cloud da locaweb,
e esta me mostrando as mensagens abaixo, sobre vazamento de memória ou falta de espaço devido a não rotacionar
os objertos que estão em memória do tomcat(conforme li na documentação da oracle esta opção era para fazer isso -XX:+UseCodeCacheFlushing, mas não esta) e com isso ele para de funcionar, então preciso reinicializar o serviço!
Mas como é um sistema de produção esta complicado isso, sendo que acontece de 20 a 30 minutos as vezes demora mais…

Foi realizado diversas configurações no catalina.sh, para o tomcat limpar o cache e o lixo, aumentei a memória, porem estas configurações apenas estão adiando meu problema… alguém tem uma idéia do que eu possa fazer ??

Segue os logs do que acontece:

mmap failed for CEN and END part of zip file ..

Java HotSpot™ 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot™ 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=
Code Cache [0x00007f630d6f8000, 0x00007f630dc98000, 0x00007f63106f8000)
total_blobs=2561 nmethods=1767 adapters=449 free_code_cache=43457Kb largest_free_block=44434048

segue as configurações do catalina.sh :

JAVA_OPTS="-Dfile.encoding=ISO-8859-1 -Duser.timezone=America/Sao_Paulo -server -Xms700m -Xmx1100m -XX:PermSize=626m -XX:MaxPermSize=826m -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=264m -XX:CodeCacheFlushingMinimumFreeSpace=50m"

Ja usei também essas opções para logar e nos resultados me mostram que esta coletando o lixo "GC Full"

-Xloggc:/usr/local/tomcat7/logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-HeapDumpOnOutOfMemoryError

Coletas:

.166: [Full GC (System) [PSYoungGen: 4406K->0K(209088K)] [ParOldGen: 64K->4252K(477888K)] 4470K->4252K(686976K) [PSPermGen: 9753K->9750K(641024K)], 0.0497130 secs] [Times: user=0.06 sys=0.01, real=0.05 secs]
Heap after GC invocations=2 (full 1):

30.508: [GC [PSYoungGen: 209087K->29810K(187136K)] 330012K->176456K(665024K), 0.1144700 secs] [Times: user=0.12 sys=0.11, real=0.11 secs]
Heap after GC invocations=7 (full 1):
PSYoungGen total 187136K, used 29810K [0x00000000e9160000, 0x0000000100000000, 0x0000000100000000)

1.166: [Full GC (System) [PSYoungGen: 4406K->0K(209088K)] [ParOldGen: 64K->4252K(477888K)] 4470K->4252K(686976K) [PSPermGen: 9753K->9750K(641024K)], 0.0497130 secs] [Times: user=0.06 sys=0.01, real=0.05 secs]

Alguém teria alguma dica, para alterar na aplicação isso?

Desde já agradeço.

9 Respostas

darklordkamui

talvez se voce colocar mais memoria nisso -Xms700m -Xmx1100m pode funcionar… tenta por -Xms1100m -Xmx2048m… quanto tem de memoria seu servidor? dependendo vai aumentando ate o maximo para saber se resolve o problema

erico_kl

Tente monitorar o seu tomcat utilizando um JVisualVM da vida para tentar obter mais informações…

aureliolima

tem 2 gb de memória para o so, bd, aplicação e webmail basicamente…

davidbuzatto

Será que o problema é o Tomcat ou a sua aplicação?

aureliolima

eu não posso aumentar a memória, e se eu aumentar apenas vai adiar o problema, pois quando o espaço for preenchido vai ocorrer o estouro de memória novamente

aureliolima

Será que pode ser alguma vulnerabilidade no tomcat 7?

aureliolima

Alguém já utilizou esta ferramenta, citada neste blog: http://blog.caelum.com.br/vazamento-de-memoria-e-de-conexoes/

Parece ser interessante. Se alguém tiver algum feedback a respeito dela, será bem vindo…

furutani

Olá
Eu acho que o problema não é no tomcat, com 1GB de memória dá pra rodar muita coisa.
Usa um profile para ver se na aplicação(ões) não tem algum problema de referencia circular, objeto presos, acumulo de lixo em collections, etc.

aureliolima

Hospedei toda o site, em outro servidor e funcionou perfeitamente.

Criado 17 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 9
Participantes 5