O que devo fazer se um erro for retornado quando eu usar o pool de conexão Jedis?
A mensagem de erro que possivelmente será exibida quando você usar o pool de conexão Jedis JedisPool é a seguinte:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Se essa mensagem de erro for exibida, verifique se a instância está sendo executada corretamente. Se estiver funcionando corretamente, execute as seguintes verificações:
- Verifique a rede.
- Verifique as configurações de endereço IP.
Verifique se o endereço IP configurado no cliente Jedis é o mesmo que o endereço de sub-rede configurado para sua instância de DCS. Se o acesso público estiver habilitado para sua instância, verifique se o endereço IP configurado no cliente Jedis é o mesmo que o EIP vinculado à sua instância. Se forem inconsistentes, modifique a configuração do endereço IP e tente novamente.
- Teste a rede.
Use o comando ping e telnet no cliente para testar a rede.
- Se não for possível fazer ping na rede:
- Para acesso dentro da VPC, verifique se o cliente e a sua instância do DCS estão na mesma VPC e se as regras de grupo de segurança ou a lista branca foram configuradas corretamente.
- Para acesso público com SSL, verifique se você configurou o grupo de segurança de sua instância de DCS, permitindo o acesso por meio da porta 36379, conforme instruído em Configurações de grupo de segurança.
- Para acesso público sem SSL, verifique se você configurou o grupo de segurança da instância do DCS, permitindo o acesso pela porta 6379, conforme instruído em Configurações de grupo de segurança.
- Se for possível fazer o ping do endereço IP, mas o telnet falhar, reinicie sua instância. Se o problema persistir após a reinicialização, entre em contato com o suporte técnico.
- Se não for possível fazer ping na rede:
- Verifique as configurações de endereço IP.
- Verifique o número de conexões.
Verifique se o número de conexões de rede estabelecidas excede o limite superior configurado para JedisPool. Se o número de conexões estabelecidas se aproximar do limite superior configurado, reinicie o serviço DCS e verifique se o problema persiste. Se o número de conexões estabelecidas estiver muito abaixo do limite superior, continue com as seguintes verificações.
No Unix ou Linux, execute o seguinte comando para consultar o número de conexões de rede estabelecidas:
netstat -an | grep 6379 | grep ESTABLISHED | wc -l
No Windows, execute o seguinte comando para consultar o número de conexões de rede estabelecidas:
netstat -an | find "6379" | find "ESTABLISHED" /C
- Verifique o código JedisPool.
Se o número de conexões estabelecidas se aproximar do limite superior, determine se o problema é causado pela simultaneidade do serviço ou pelo uso incorreto de JedisPool.
Ao usar o JedisPool, você deve chamar jedisPool.returnResource() ou jedis.close() (recomendado) para liberar os recursos depois de chamar jedisPool.getResource().
- Verifique o número de conexões TIME_WAIT.
Execute o comando ss -s para verificar se há muitas conexões TIME_WAIT no cliente.
Se houver muitas conexões TIME_WAIT, modifique os parâmetros do kernel executando o comando /etc/sysctl.conf da seguinte maneira:
##Uses cookies to prevent some SYN flood attacks when the SYN waiting queue overflows. net.ipv4.tcp_syncookies = 1 ##Reuses TIME_WAIT sockets for new TCP connections. net.ipv4.tcp_tw_reuse = 1 ##Enables quick reclamation of TIME_WAIT sockets in TCP connections. net.ipv4.tcp_tw_recycle = 1 ##Modifies the default timeout time of the system. net.ipv4.tcp_fin_timeout = 30
Após a modificação, execute o comando /sbin/sysctl -p para que a modificação tenha efeito.
- Se o problema persistir depois de executar as verificações anteriores, execute as etapas a seguir.
Capture pacotes e envie arquivos de pacotes juntamente com o tempo e a descrição da exceção ao suporte técnico para análise.
Execute o seguinte comando para capturar pacotes:
tcpdump -i eth0 tcp and port 6379 -n -nn -s 74 -w dump.pcap
No Windows, você também pode instalar a ferramenta Wireshark para capturar pacotes.
Para acesso público, altere o número da porta para 36379.
Substitua o nome da NIC pelo nome real.