| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 10:09:01
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
E ai povo,
Atualmente eu andei tendo problemas com o coletor de lixo do java em uma aplicação web no cliente, isso começou do nada.
Depois de algum tempo rodando, a aplicação simplesmente para de funcionar, notei que nos logs da aplicação aparecem erros imensos e o último é sempre do tipo
Isso fica direto toda vez que a aplicação tenta acessar o banco ou alguém tenta acessar uma página dela.
Começou a acontecer de um tempo para cá, antes a aplicação rodava meses sem parar, agora roda algumas horas e morre.
Fazendo testes e pesquisando na internet, descobri que o linux (o SO do meu cliente é linux, e esse não é o problema, pois tenho outro cliente rodando a mesma aplicação em linux e o problema não ocorre) tem um limite para arquivos abertos.
Com isso fiquei monitorando a quantidade de arquivos abertos e descobri que a aplicação vai abrindo arquivos até estourar o limite.
Fiz o mesmo teste localmente e a quantidade de arquivos ficava entre 100 e 400, qdo atingia por volta de 300 e 400, o coletor de lixo do java passava e limpava tudo.
Porém no meu cliente isso não ocorre, os testes que eu fiz foi na mesma distribuição que ele usa, e o servidor onde a aplicação está instalada, só tem java, tomcat e mysql e ainda por cima só roda a minha aplicação.
Mas ocorre algo mais estranho ainda, quando alguém envia uma requisição para a aplicação, o coletor de lixo do java simplesmente passa e libera os objetos da memória, a quantidade de arquivos cai para mais ou menos uns 300.
Segundo o meu cliente não houve nenhuma alteração naquele servidor.
Alguém sabe o que pode ser?
As versões dos programas instalados
Tomcat 6.0.18
Java 1.6.0_13u
MySQL 5.1
A aplicação usa Hibernate/JPA e Spring
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 12:22:55
|
Vmaia
JavaChild
![[Avatar]](/images/avatar/6b595bb87a53c615a535554667cfdde0.jpg)
Membro desde: 15/12/2007 23:36:19
Mensagens: 135
Offline
|
Olá,
Ve se te ajuda....
http://dicasjboss.blogspot.com/2007/09/javanetsocketexception-too-many-open.html
|
Vmaia =D |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 12:49:54
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
Eu já tinha visto esse
Pra mim não funciona, o número de arquivos abertos aumenta e não abaixa, só quando faço alguma requisição http para a aplicação
aumentar esse limite só vai fazer com que a aplicação demore um pouco mais para travar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 12:55:42
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Você chama o comando close() explicitamente, dentro de um bloco finally?
Qual a velocidade com que você abre e fecha conexões sockets?
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 13:02:22
|
Vmaia
JavaChild
![[Avatar]](/images/avatar/6b595bb87a53c615a535554667cfdde0.jpg)
Membro desde: 15/12/2007 23:36:19
Mensagens: 135
Offline
|
Entendi, ......
- está ocorrendo mais acessos ao teu sistema, fazendo com que ele sobrecarregue ?
- por acaso a aplicação está deixando de fechar as conecções ?
- tem certeza que não houve mudança no ambiente ? [pois, se esta tudo funcionando e agora não ..... provavelmente alguem alterou algo. ]
--- problema de memória ?
- vc consegue reproduzir essa situação em algum outro lugar ?
--- tente trocar o binário do aplicativo.... caso não tenha como reproduzir o erro, pode ter [suposição] corrompido o pacote. =D
|
Vmaia =D |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 13:29:01
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
ViniGodoy, eu fecho tudo que eu abro na aplicação, só não posso garantir quanto ao Axis2 e ao driver do MySQL
Vmaia, pelo contrário, quando tem acesso o coletor de lixo do java funciona e o problema não acontece. Eu havia refeito o deploy da aplicação, eu tinha corrigido um bug, consertado um erro num JSP e criado clientes para acessar outros webservices mas as alterações não fizeram diferença para esse cliente, já tentei colocar a versão antiga para rodar e dá o mesmo erro.
Já fiz o mesmo procedimento numa maquina virtual com o mesmo linux e as mesmas versões dos programas que estão instalados e nada do erro.
Problema de vazamento de memória o tomcat deve ter, mais o coletor de lixo do java aparentemente nem passa, pq a quantidade de arquivos abertos pelo java aumenta cada vez mais e nada de baixar.
E no outro cliente que tem linux a aplicação roda normal e tem bem mais coisa no servidor dele.
Respondendo a segunda pergunta do ViniGodoy, a aplicação tem um monte de threads que rodam em background, tem 2 que rodam de 5 em 5 minutos que fazem consulta no banco e pegam arquivos e enviam dados a webservices.
Tem outras 3 que fazer consultas em webservices para verificar o funcionamento de serviços e mais outras duas que usam a internet, tem mais duas que rodam de meia em meia hora que fazer umas consultas no banco para verificar o sistema.
Eu não mexo com socket diretamente, quem usa é o spring, mysql, javamail, axis
This message was edited 1 time. Last update was at 17/05/2010 13:47:15
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 14:06:25
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
Eu desconfiava do tamanho da aplicação que tem atualmente 36 megas
Só me sobrou algumas alternativas
- Tentar reinstalar o java;
- Fazer um programa que fique fazendo requisições para a página da aplicação (aparentemente funciona);
- Falar pro cliente que é problema do SO dele;
Eu já perguntei umas 300 vezes se ele alterou alguma coisa no servidor, mas ele sempre diz que não mudou nada.
Minha unica explicação para o problema é o servidor estar possuído por algum script do mau.
Também notei que a aplicação no servidor dele demora mais que o normal para realizar algumas tarefas as vezes penso que é devido a quantidade de registros no banco.
Também pensei que poderia ser o banco que estivesse segurando as conexões, fiquei vendo a quantidade de usuários conectados e nada, tem apenas um.
[edit]
Eu não conheço nada da arquitetura do linux, mas existe algo que pudesse acontecer com o SO que impedisse que o java conseguisse coletar a memória usada.
Aparentemente, o coletor de lixo só funciona se vc fizer uma requisição http para a aplicação antes que ela trave, não sei se enviar alguma requisição para o tomcat dá o mesmo efeito, vou testar isso para ver o que acontece.
This message was edited 1 time. Last update was at 17/05/2010 14:17:02
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 18:09:26
|
pmlm
GUJ Master
Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Offline
|
Linux 32 ou 64 bits?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2010 19:58:24
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
pmlm wrote:Linux 32 ou 64 bits?
32
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2010 05:25:05
|
pmlm
GUJ Master
Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Offline
|
Ok. Já tive uns problemas estranhos mas foi com 64 bits.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2010 07:47:15
|
zoren
GUJ Master
![[Avatar]](/images/avatar/9efbafef9f85fd9caa789941a4cdf821.jpg)
Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline
|
pmlm wrote:Ok. Já tive uns problemas estranhos mas foi com 64 bits.
Quais foram os problemas?? Talvez me ajude
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2010 09:46:22
|
pmlm
GUJ Master
Membro desde: 20/04/2009 12:20:07
Mensagens: 1199
Localização: Portugal
Offline
|
Problemas de performance estranhos, aleatórios. A solução foi instalar a JVM para 32 bits (estranho, eu sei)
|
|
|
 |
|
|