Olá…
estamos com um problema aqui na empresa que não sabemos mais o que fazer para tentar resolver…
Temos um servidor linux com PostgreSQL 8.4 sendo acessado remotamente pelos clientes com aplicações java swing distribuídas com JWS
o problema é o seguinte… os clientes acessam normalmente só que acontece que de vez em quando, em alguns acessos, acontece o erro de Conexão Negada: Verifique se o postmaster… Caused By connection timed out
lembrando que isso ocorre esporadicamente… e não a toda hora… mas um desses problemas serve para dar erro em alguma gravação ou não gerar um relatório etc…
Obs.: princípios básicos (primeiras coisas que pensamos ao ver esse erro tais como ajeitar pg_hba.conf, postgresql.conf, liberar ip, firewall, jdbc atualizado, conexões estáveis etc.) estão ok…
Se alguém já teve esse problema e puder ajudar ficaremos gratos… pois não sabemos mais pra onde atirar as pedras… já fizemos de tudo… nada resolve…
enquanto não resolvemos isso os clientes estão propensos a terem dados inconsistentes…
mais uma coisa… formatamos o servidor (antes era Kurumin, agora é Ubuntu) e instalamos novamente o postgre… também nao adiantou…
Tente fazer um teste de carga para ver como a aplicação se comporta.
erico_kl
neste servidor temos poucos clientes acessando… e hoje de madrugada deixamos rodando uma rotina em 3 estações que gravava e buscava no banco 50 mil registros cada uma…
o erro aconteceu em média 4 vezes durante toda a madrugada por cada estação…
erico_kl
será que pode ser algo relacionado à login role?
pois todos os clientes possuem a mesma login role para acesso…
mas a login role está com connection limit -1 no banco :?
talvez tenha algo relacionado com acessos da mesma login role, no mesmo banco de dados, na mesma tabela… será que pode ser isso?
Obs.: só tenho como testar isso de madrugada fazendo um outro teste de carga… mas nem vou testar, caso eu esteja falando besteira…
erico_kl
estamos fazendo mais testes aqui com o firewall para ver se resolve… qualquer coisa eu posto aqui…
qualquer outra dica será bem vinda…
erico_kl
não é firewall… :?
neste link aqui eu posto a maneira de como a gente faz a conexão na aplicação… se alguém quiser olhar, agradeço…
nunca tivemos um problema que nos desgastasse tanto quanto esse… faz quase 1 mes que estamos trabalhando só para resolvê-lo e nada…
obrigado a todos…
aix
erico_kl:
não é firewall… :?
neste link aqui eu posto a maneira de como a gente faz a conexão na aplicação… se alguém quiser olhar, agradeço…
nunca tivemos um problema que nos desgastasse tanto quanto esse… faz quase 1 mes que estamos trabalhando só para resolvê-lo e nada…
obrigado a todos…
acredito que não seje firewall mesmo, é um iptables que você esta usando ? ou tem algum outro firewall entre esse linux e a wan ? sinceramente, eu coloca o JPA para cuidar das transações com o banco, do que esse monte de código SQL, outra coisa que eu não faria era deixar a autenticação a cargo do container, e para saber se é um problema do acesso de fora para o banco de dados, basta você executar os mesmos testes (numero de conexões ativas no banco e na rede) de dentro da rede se o erro persistir ta provado que não tem nada a ver com firewall, mas se ficar ok e os acessos externos não provável que tenha algo na rede bloqueando as conexões ou acesso ao bd etc…
erico_kl
obrigado pela resposta aix…
pois é… esse teste fizemos hoje de tarde e não foi reportado este erro… apenas em 1 estação que teve “a tentativa de conexão falhou… endereço já existente” mas nao é o mesmo erro que a gente tem online… entao nao levamos em conta esta estação…
mas quanto ao código não teria nada de errado nele que possa estar recusando conexões de fora? posso acessar pela WAN do mesmo jeito que acesso pela LAN?
obs.: não usamos hibernate ou jpa porque iniciamos os projetos sem, e já estamos acostumados a trabalhar assim… mas se tiver algum problema quanto a isso os sistemas serão readaptados (acredito que não haja…)
mais uma vez obrigado…
aix
erico_kl:
obrigado pela resposta aix…
pois é… esse teste fizemos hoje de tarde e não foi reportado este erro… apenas em 1 estação que teve “a tentativa de conexão falhou… endereço já existente” mas nao é o mesmo erro que a gente tem online… entao nao levamos em conta esta estação…
mas quanto ao código não teria nada de errado nele que possa estar recusando conexões de fora? posso acessar pela WAN do mesmo jeito que acesso pela LAN?
obs.: não usamos hibernate ou jpa porque iniciamos os projetos sem, e já estamos acostumados a trabalhar assim… mas se tiver algum problema quanto a isso os sistemas serão readaptados (acredito que não haja…)
mais uma vez obrigado…
Erico com certeza não tem nenhum problema em usar JDBC, depois desse teste me leva a crer que pode ser alguma coisa bloqueando, eu iria verificar os logs de acesso no LINUX tipo um tail -f /var/log e logs de acesso ao banco, qual é o firewall ? não vejo nada de errado no código que pudesse fazer recusar conexoes externas.
erico_kl
antes era o kurumin firewall mas depois que formatamos e colocamos o ubuntu nao colocamos nenhum ainda pra ter certeza que nao era firewall…
e nos logs do postgre só constam alguns EOF e alguns outros que não batem no mesmo horário desses erros…
também temos certeza que não é banco de dados…
e agora descartamos a possibilidade de ser o sistema…
estamos realizando outro teste de carga esta madrugada e assim que realizarmos eu posto aqui o que aconteceu…
muito obrigado…
erico_kl
bom dia…
o teste de carga desta madrugada foi feito em outro servidor, com outro link (também link dedicado mas nao da mesma empresa)…
Largamos uma rotina em 2 estações e notamos os mesmos erros… “conexão negada, verifique se o postmaster… connection timed out…”
já trocamos TUDO… e o erro continua… é incrível… nunca vimos algo parecido…
a única coisa que não trocamos ainda é a linguagem de programação…
vamos ao que já foi feito testado:
JDBC
Firewall
S.O
Placa de Rede
Link
Versão do Banco de Dados
Servidor INTEIRO
Estações de teste
Link do cliente (quando não sabíamos mais o que fazer…)
tem alguma lógica em mesmo depois de trocar/testar tudo isso ainda continuar dando esse problema?
erico_kl
tive uma ideia… não sei se isso ajudaria…
será que se eu conseguisse diminuir o tempo do time out no postgre e achar uma forma de setar um auto_reconnect nao resolveria nosso problema?
pois assim se desse esse problema novamente, a conexão seria restabelecida criando um novo processo…
o problema é setar o auto_reconnect… sei que no mysql tem como, mas ainda não achei uma forma de fazer isso no postgre…
entendo que muitas vezes isso pode não ser uma boa opção, mas como já tentamos de tudo, não custa tentar mais isso…
qualquer ajuda é bem-vinda
abraço a todos…
erico_kl
outra coisa…
isso realmente serve para um sistema rodando online?
falei com algumas pessoas que me disseram para criar algo na aplicação que gerencie pool de conexões…
tenho como fazer isso numa aplicação swing utilizando jdbc?
se sim, terei que mudar muita coisa a partir dessa estrutura apresentada no link anterior?
obrigado
erico_kl
talvez se eu modificar a estrutura para todos os clientes fazerem acesso nao diretamente ao banco, mas sim à um web service que estaria no servidor e este pegaria as informações do banco (então localhost) e enviasse de volta para o cliente… seria uma saída?
foi uma das maneiras que a gente está cogitando…
caso façamos por web service, deveríamos modificar todas as DAOs? ou a estrutura MVC utilizada permitiria uma troca de estrutura que não afete tanto o código?
o nosso medo é esse… ter que “jogar fora” o modelo de acesso aos dados para trabalhar com web service (que sem dúvida consumiria meses de trabalho para readaptar todos os fontes…)