motan
motan copied to clipboard
服务端频繁出现 Connection timed out
挺长时间了,感觉无从下手。
2018-02-09 15:29:29,796 ERROR [error 87] - NettyChannelHandler exceptionCaught: remote=/172.30.95.0:35216 local=/172.30.61.3:8002 event=java.io.IOException: Connection timed out java.io.IOException: Connection timed out 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:192) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109) at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)
server端的业务逻辑中有file相关的操作吗?
@rayzhang0603 没有
@ananas-hebo 我们服务器频繁出现的是下面这个报错,感觉也是无从下手 2018-02-27 16:10:40,831 New I/O server worker #1-4 [ERROR][error] NettyChannelHandler exceptionCaught: remote=/192.168.66.3:54641 local=/192.168.66.10:9003 event=java.io.IOException: Connection reset by peer 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:192) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:321) at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
@winner1207 Connection reset by peer可能的原因很多,有可能是网络原因,也可能是client端因为发送请求超时而关闭。 也可以看看对应的server端和client 端的tcp链接数量或者状态有没有什么可疑的地方。 一般server端的Connection reset by peer不会对server服务产生什么影响
@rayzhang0603 最近服务器client请求server一直是超时,超时时间设置的是10秒,这是什么原因?
com.weibo.api.motan.exception.MotanServiceException: error_message: com.weibo.api.motan.rpc.DefaultResponseFuture request timeout: serverPort=192.168.66.10:9003 requestId=1593544393041988488 interface=com.yichat.rpc.motan.MotanApiService method=postDataStreamUrl(long,com.yichat.info.PostDataInfo) cost=10000, status: 503, error_code: 10003,r=null
at com.weibo.api.motan.rpc.DefaultResponseFuture.timeoutSoCancel(DefaultResponseFuture.java:215)
at com.weibo.api.motan.rpc.DefaultResponseFuture.getValue(DefaultResponseFuture.java:115)
at com.weibo.api.motan.rpc.DefaultResponse.
可以打开accesslog日志,看看server端实际处理时间是否超时。 如果server业务处理没有超时的话,可以再看看client端和server端的异常日志,看看有没有什么可疑的异常,例如编解码异常、序列化异常等,一般编解码异常在请求上的表现也是超时
NettyChannelHandler exceptionCaught: remote=/172.30.95.0:35216 local=/172.30.61.3:8002 event=java.io.IOException: Connection timed out
我也遇到了这个问题,且当client 和server 不在同个网段的时候才会发生这个问题。一开始以为是client 连接不到server,但发现这里的 local 是RPC服务端口8002, remote 是一个随机端口。看起来是server 要去连接client 的35216端口,发送一些数据,但由于网络问题 Connection timed out。
看了 SimpleChannelHandler 的说明,提到双向通讯的时候才去继承这个类,这里 server 是要向 client 发送什么数据? @rayzhang0603
@Redliver 这个是client请求server时主动建立的链接,client发送请求和server返回response都是通过这个channel。一般出现这种情况的原因是client因为超时等原因主动关闭了链接,导致server发送reponse时失败
@rayzhang0603 我检查了client 和server 的日志,client 日常很少量 MotanServiceException 等超时异常,一天就可能就几个。但服务端的报错数量在上万个左右,且分布均匀,大概每5分钟有200+这个异常,共同点时这个错误只会出现在client 和 server 在不同网段的情况下,网络关系是不通的。
拿了几个连接的日志看,基本都是以下信息:
- client 12:28:50.570 NettyChannelHandler channelConnected: remote=/XX.XX.34.165:8883 local=/XX.XX.115.106:55866 event=UpstreamChannelStateEvent
- server 12:28:50.794 NettyChannelHandler channelConnected: remote=/XX.XX.115.106:55866 local=/XX.XX.34.165:8883 event=UpstreamChannelStateEvent
- client 13:38:50.570 NettyChannelHandler channelDisconnected: remote=/XX.XX.34.165:8883 local=/XX.XX.115.106:55866 event=UpstreamChannelStateEvent
- server 14:48:42.762 NettyChannelHandler channelDisconnected: remote=/XX.XX.115.106:55866 local=/XX.XX.34.165:8883 event=UpstreamChannelStateEvent
- server 14:48:42.762 NettyChannelHandler exceptionCaught: remote=/XX.XX.115.106:55866 local=/XX.XX.34.165:8883 event=java.io.IOException: Connection timed out
在第三条日志client 断开后(可能是空闲回收)大概1小时左右,服务端在client和server 的跨网段情况下就会抛出这个异常
@Redliver 看日志信息,是client端断开链接时,server端没有正常断开链接,可以抓包看一下tcp断链过程有没有什么问题