Linyuzai / concept

封装了一些常用组件,走过路过不要错过哦
Apache License 2.0
380 stars 113 forks source link

websocket连接过多 #35

Closed chuchushijingxi closed 3 months ago

chuchushijingxi commented 3 months ago

依赖名称: concept-websocket-loadbalance-spring-boot-starter 依赖版本: 2.4.0

springboot 3.1.3 spring-cloud 2022.0.4 spring-cloud-alibaba 2022.0.0.0 jdk 17

问题描述: 在两台机器上部署了服务

异常堆栈:

reactor.core.Exceptions$ErrorCallbackNotImplemented: io.netty.channel.unix.Errors$NativeIoException: sendAddress(..) failed: Broken pipe Caused by: io.netty.channel.unix.Errors$NativeIoException: sendAddress(..) failed: Broken pipe

- 服务异常日志
```java
2024-03-06 16:06:09.743 ERROR 1 --- [io-7000-exec-30] c.g.l.c.l.core.logger.ConnectionLogger   : LBWebSocket >> Exception occurred

java.io.IOException: java.io.IOException: Broken pipe
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:321)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:257)
        at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:718)
        at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:628)
        at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:347)
        at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:279)
        at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130)
        at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85)
        at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184)
        at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164)
        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152)
        at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Broken pipe
        at java.base/sun.nio.ch.FileDispatcherImpl.writev0(Native Method)
        at java.base/sun.nio.ch.SocketDispatcher.writev(Unknown Source)
        at java.base/sun.nio.ch.IOUtil.write(Unknown Source)
        at java.base/sun.nio.ch.IOUtil.write(Unknown Source)
        at java.base/sun.nio.ch.SocketChannelImpl.write(Unknown Source)
        at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:130)
        at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1631)
        at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051)
        at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440)
        at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366)
        at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337)
        at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:165)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:516)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:308)
        ... 19 common frames omitted

2024-03-06 16:06:09.743 ERROR 1 --- [io-7000-exec-63] c.g.l.c.l.core.logger.ConnectionLogger   : LBWebSocket >> Exception occurred

java.io.IOException: java.io.IOException: Connection reset by peer
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:321)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:257)
        at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:718)
        at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:628)
        at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:347)
        at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:279)
        at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130)
        at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85)
        at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184)
        at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164)
        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152)
        at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Connection reset by peer
        at java.base/sun.nio.ch.FileDispatcherImpl.writev0(Native Method)
        at java.base/sun.nio.ch.SocketDispatcher.writev(Unknown Source)
        at java.base/sun.nio.ch.IOUtil.write(Unknown Source)
        at java.base/sun.nio.ch.IOUtil.write(Unknown Source)
        at java.base/sun.nio.ch.SocketChannelImpl.write(Unknown Source)
        at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:130)
        at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1631)
        at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051)
        at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440)
        at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366)
        at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337)
        at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:165)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:516)
        at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:308)
        ... 19 common frames omitted

代码示例:

Linyuzai commented 3 months ago

感觉会不会是tomcat的连接数限制啊,你看有没有类似的配置改大一点试一试

chuchushijingxi commented 3 months ago

感觉会不会是tomcat的连接数限制啊,你看有没有类似的配置改大一点试一试

是的,修改了 tomcat 和 nginx 的连接配置已经可以了,谢谢大佬