¿Qué debo hacer si se reporta el error de Java "Connection reset by peer" durante la comprobación de estado de la capa 4 de ELB?
Información de error completa
java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) at sun.nio.ch.IOUtil.read(IOUtil.java:197) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) at com.wanyu.smarthome.gateway.EquipmentSocketServer.handleReadEx(EquipmentSocketServer.java:245) at com.wanyu.smarthome.gateway.EquipmentSocketServer.run(EquipmentSocketServer.java:115)
Resultado del análisis
Se establece un servidor de socket utilizando Java Non-blocking I/O (NIO). Cuando el cliente se cierra inesperadamente en lugar de enviar una notificación especificada para indicar al servidor que salga, se informa de un error.
Proceso de comprobación de estado TCP
- El nodo de ELB que realiza comprobaciones de estado envía un paquete SYN al servidor backend (dirección IP privada + puerto de comprobación de estado) basado en la configuración de comprobación de estado.
- Después de recibir el paquete, el servidor backend devuelve un paquete SYN-ACK a través de su puerto.
- Si el nodo de ELB no recibe el paquete SYN-ACK dentro de la duración del tiempo de espera, el servidor backend se declara insalubre. A continuación, el nodo de ELB envía un paquete RST al servidor back-end para terminar la conexión de TCP.
- Si el nodo de ELB recibe el paquete SYN-ACK desde el servidor backend dentro de la duración del tiempo de espera, envía un paquete de ACK al servidor backend y declara que el servidor backend está en buen estado. A continuación, el nodo de ELB envía un paquete RST al servidor back-end para terminar la conexión de TCP.
Nota
Después de un handshake de tres vías de TCP normal, habrá transferencia de datos. Sin embargo, se enviará un paquete de RST para terminar la conexión de TCP durante la comprobación de estado. Las aplicaciones en el servidor backend pueden determinar un error de conexión e informar de un mensaje, por ejemplo, "Connection reset by peer".
Este error está justificado e inevitable. Puede ignorarlo.