Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Distributed Cache Service/ Perguntas frequentes/ Cliente e conexão de rede/ O que devo fazer se um erro for retornado quando eu usar o pool de conexão Jedis?
Atualizado em 2023-12-20 GMT+08:00

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:

  1. Verifique a rede.

    1. 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.

    2. 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:
      • 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.

  2. 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

  3. 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().

  4. 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.

  5. 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.