quinta-feira, 5 de junho de 2008

Broken pipe na conexão com socket no banco de dados

Bom, pra não perder o histórico do blog (já que realmente não costumo postar muito) vou deixar a solução digamos meio que "gambearristica" encontrada abaixo, mas que me resolveu o problema no momento e vou criar outro tópico sobre esse mesmo assunto, pois consegui resolver o problema de forma efetiva sem alterar qualquer configuração no banco de dados, a solução (ao meu ver mais correta) está nesse link: http://netbeando.blogspot.com/2009/03/broken-pipe-solucao-correta.html

Mas caso ela não resolva o seu problema, parta para algo mais radical como a solução abaixo:

Fiquei muito tempo tentando descobrir como resolver um problema que ocorria todos os dias em um sistema que ficava aguardando conexões de clientes através de um socket, o problema é que como as conexões eram esporádicas, ou seja, ficavam as vezes mais de 10 horas sem receber conexão alguma e no momento que algum cliente tentava se conectar depois deste período de inatividade ocorria o erro no socket com a mensagem "broken pipe", bom, tentei resolver de várias formas, mas infelizmente por uma série de motivos a única forma que resolveu efetivamente foi aumentando o timeout do próprio banco de dados. No meu caso eu estou utilizando o mysql, então se você acessar o prompt do mysql e digitar:

show variables

Serão mostradas todas as variáveis utilizadas por esse banco de dados, a que realmente interessa é a:

wait_timeout

Inicialmente essa variável está definida para 28800 , li sobre o assunto e me parece que definindo como ZERO as conexões do banco de dados ficam sem timeout, acabei não optando por essa opção, simplesmente aumentei esse timeout para que ficasse a minha conexão ativa por mais de 12h mesmo sem inatividade, resolveu 100% o problema.

Bom, agora você deve estar se perguntando como alterar o conteúdo desta variável, no meu caso, como o sistema operacional que esta instalado o sistema é um Linux, bastou acessar o arquivo /etc/mysql/my.cnf , editar com um editor de textos qualquer e trocar o valor da variável... claro tive que reiniciar o mysql depois.

T+

Nenhum comentário: