Tomcat 7 - vazamento de memória

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.

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

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

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

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

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

Será que pode ser alguma vulnerabilidade no tomcat 7?

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…

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.

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