Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Distributed Cache Service/ Preguntas frecuentes/ Cliente y conexión de red/ ¿Qué debo hacer si se devuelve un error cuando uso el grupo de conexiones de Jedis?
Actualización más reciente 2023-05-08 GMT+08:00

¿Qué debo hacer si se devuelve un error cuando uso el grupo de conexiones de Jedis?

El mensaje de error que posiblemente se mostrará cuando use el grupo de conexión de Jedis JedisPool es el siguiente:

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

Si se muestra este mensaje de error, compruebe si la instancia se está ejecutando correctamente. Si se está ejecutando correctamente, realice las siguientes comprobaciones:

  1. Comprobar el estado de la red.

    1. Compruebe las configuraciones de la dirección IP.

      Compruebe si la dirección IP configurada en el cliente Jedis es la misma que la dirección de subred configurada para su instancia de DCS. Si el acceso público está habilitado para su instancia, compruebe si la dirección IP configurada en el cliente de Jedis es la misma que la EIP vinculada a su instancia. Si no son coherentes, modifique la configuración de la dirección IP e inténtelo de nuevo.

    2. Pruebe la red.

      Utilice el comando ping y telnet en el cliente para probar la red.

      • Si no se puede hacer ping a la red:
        • Para el acceso dentro de la VPC, asegúrese de que el cliente y su instancia de DCS están en la misma VPC, y las reglas de grupo de seguridad o la lista blanca se han configurado correctamente.
        • Para el acceso público con SSL, asegúrese de haber configurado el grupo de seguridad de su instancia de DCS, permitiendo el acceso a través del puerto 36379 como se indica en Configuraciones de grupo de seguridad.
        • Para el acceso público sin SSL, asegúrese de haber configurado el grupo de seguridad de su instancia de DCS, permitiendo el acceso a través del puerto 6379 como se indica en Configuraciones de grupo de seguridad.
      • Si la dirección IP se puede hacer ping pero telnet falló, reinicie su instancia. Si el problema persiste después del reinicio, póngase en contacto con el soporte técnico.

  2. Compruebe el número de conexiones.

    Compruebe si el número de conexiones de red establecidas excede el límite superior configurado para JedisPool. Si el número de conexiones establecidas se acerca al límite superior configurado, reinicie el servicio de DCS y compruebe si el problema persiste. Si el número de conexiones establecidas está muy por debajo del límite superior, continúe con las siguientes comprobaciones.

    En Unix o Linux, ejecute el siguiente comando para consultar el número de conexiones de red establecidas:

    netstat -an | grep 6379 | grep ESTABLISHED | wc -l

    En Windows, ejecute el siguiente comando para consultar el número de conexiones de red establecidas:

    netstat -an | find "6379" | find "ESTABLISHED" /C

  3. Compruebe el código de JedisPool.

    Si el número de conexiones establecidas se aproxima al límite superior, determine si el problema se debe a la concurrencia del servicio o al uso incorrecto de JedisPool.

    Al usar JedisPool, debe invocar a jedisPool.returnResource() o jedis.close() (recomendado) para liberar los recursos después de invocar a jedisPool.getResource().

  4. Compruebe el número de conexiones TIME_WAIT.

    Ejecute el comando ss -s para comprobar si hay demasiadas conexiones TIME_WAIT en el cliente.

    Si hay demasiadas conexiones TIME_WAIT, modifique los parámetros del núcleo ejecutando el comando /etc/sysctl.conf de la siguiente manera:

    ##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

    Después de la modificación, ejecute el comando /sbin/sysctl -p para que la modificación surta efecto.

  5. Si el problema persiste después de realizar las comprobaciones anteriores, realice los siguientes pasos.

    Capture paquetes y envíe archivos de paquetes junto con la hora y la descripción de la excepción al soporte técnico para su análisis.

    Ejecute el siguiente comando para capturar paquetes:

    tcpdump -i eth0 tcp and port 6379 -n -nn -s 74 -w dump.pcap

    En Windows, también puede instalar la herramienta de Wireshark para capturar paquetes.

    Para el acceso público, cambie el número de puerto a 36379.

    Reemplace el nombre de la NIC por el nombre real.