SAC Gerencial fecha depois de um certo período

Problema

O SAC Gerencial fecha após alguns minutos ou horas durante algum relatório, ocasionando travamento ou fechamento dos sistemas.



Solução

Um tempo limite do servidor MySQL pode ocorrer por muitas razões, mas ocorre com mais frequência quando um comando é enviado para o MySQL através de uma conexão fechada. A conexão poderia ter sido fechada pelo servidor MySQL por causa de um tempo de espera ocioso.

No entanto, na maioria dos casos, é causado por um erro de aplicativo, um problema de tempo limite de rede (em um firewall, roteador, etc.) ou devido ao reinício do servidor MySQL. Raramente o valor "wait_timeout" causa o problema e a alteração do valor não resolve o problema.

Nos casos em que um aplicativo não encerra uma conexão, ele não está mais usando, um valor de "wait_timeout" baixo pode ajudar a evitar o valor em "max_connections" simplesmente devido a conexões inativas de "Sleep" que não estão em uma transação e não serão reutilizadas.


Siga estas etapas para resolver o problema:
  1. Faça login no seu servidor usando o SSH.

  2. Edite my.cnf (o arquivo de configuração do MySQL 5.6).

  3. sudo vi /etc/my.cnf (CentOS, RedHat) ou /etc/mysql/mysql.conf.d/mysqld.cnf (Debian, Ubuntu)

  4. Localize a configuração de tempo limite e ajuste-a para o seu servidor. Esta variável deve ser configurada em segundos, i.e. 28800 segundos = 8 horas.

    1. wait_timeout = 28800
    2. interactive_timeout = 28800
    3. connect_timeout = 20
    4. net_read_timeout = 1800
    5. net_write_timeout = 1800
  5. Salve as alterações e saia do editor.

  6. Reinicie o MySQL para aplicar as alterações da seguinte maneira:

    1. sudo /etc/init.d/mysql restart
  7. Uma vez que o reinício seja concluído, as novas alterações são aplicadas.

Caso prefira fazer a atualização in "real-time", execute no prompt do MySQL:

  1. SET GLOBAL interactive_timeout = 28800SET GLOBAL wait_timeout = 28800; SET GLOBAL connect_timeout = 20; SET GLOBAL net_read_timeout = 1800; SET GLOBAL net_write_timeout = 1800;
  • O tempo limite interativo não afeta nenhuma conexão de aplicativo da Web. Um tempo interativo alto, mas um tempo de espera baixo é normal e é a melhor prática.
  • Escolha um valor  "wait_timeout" razoável. Ambientes PHP sem estado fazem bem com um tempo limite de 60 segundos ou menos. Os aplicativos com status que usam um pool de conexão (Java, .NET, etc.) precisarão ajustar "wait_timeout" para combinar suas configurações de pool de conexão. O padrão de 8 horas (wait_timeout = 28800) funciona bem com pools de conexão configurados corretamente.
  • Configure o "wait_timeout" para ser um pouco mais longo do que a vida de conexão esperada do pool de conexão do aplicativo. Esta é uma boa verificação de segurança.
  • Considere mudar o valor "wait_timeout" online. Isso não requer uma reinicialização do MySQL e o "wait_timeout" pode ser ajustado no servidor em execução sem incorrer em tempo de inatividade. Você pode executar "set global wait_timeout = 60;" e quaisquer novas sessões criadas herdariam esse valor. Certifique-se de preservar a configuração no arquivo my.cnf. Todas as conexões existentes precisarão acessar o valor antigo de "wait_timeout" se o aplicativo abandonar a conexão. 
  • Se você tiver trabalhos de relatório que fará um processamento local mais longo enquanto estiver em uma transação, você pode considerar ter esses problemas de trabalho configurar a sessão "wait_timeout = 28800;" após a conexão.

Related articles