为什么 gRPC 仅在 windows 上每秒抛出一个 "established connection was aborted by the software in your host machine"?
Why does gRPC throw an "established connection was aborted by the software in your host machine" every second on windows only?
仅在 Windows ,我有一个 grpc 服务器每秒抛出这个 INFO 级堆栈跟踪:
2017-10-09T20:11:00,366 - INFO - [grpc-default-worker-ELG-1-13:io.grpc.netty.NettyServerTransport:grpc.netty.NettyServerTransport@159] - {} - Transport failed
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:1.8.0_131]
at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:1.8.0_131]
at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288) ~[ ]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1106) ~[netty-buffer-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:372) ~[netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:858) [netty-common-4.1.14.Final.jar:4.1.14.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138) [netty-common-4.1.14.Final.jar:4.1.14.Final]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
这可能与 https://github.com/grpc/grpc-java/issues/1768
中登录的内容相同
再一次,我只在 Windows 上收到此错误!
无论这个问题如何,应用程序似乎都能正常运行。
当我使用 io.grpc.Server 启动一个简单的 "hello world" 应用程序时,我没有看到此信息堆栈跟踪。
但是当我使用我的真实应用程序时,它在 grpc 服务器和码头服务器之间打开了一个双向 http2 流连接,该连接在应用程序期间保持打开状态...我收到此消息一次-第二次淹没我的日志。
将 NettyServerTransport
日志记录设置为 WARN
级别是否安全?或者我应该担心这条消息的频率?
我发现此消息是由于第三方 java 应用程序上的 tcp 心跳检查器而出现的,我们使用该应用程序来查看我的服务是否已启动。
它发出 InetSocketAddress(ip, port)
请求以检查 http2 端口是否仍在响应。
每次执行此操作时(仅在 Windows 上),它都会转储出令人讨厌的堆栈跟踪。调查原因。
已创建问题:https://github.com/nddipiazza/grpc-java-bidirectional-streaming-example
仅在 Windows ,我有一个 grpc 服务器每秒抛出这个 INFO 级堆栈跟踪:
2017-10-09T20:11:00,366 - INFO - [grpc-default-worker-ELG-1-13:io.grpc.netty.NettyServerTransport:grpc.netty.NettyServerTransport@159] - {} - Transport failed
java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:1.8.0_131]
at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:1.8.0_131]
at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:1.8.0_131]
at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288) ~[ ]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1106) ~[netty-buffer-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:372) ~[netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) [netty-transport-4.1.14.Final.jar:4.1.14.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:858) [netty-common-4.1.14.Final.jar:4.1.14.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138) [netty-common-4.1.14.Final.jar:4.1.14.Final]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
这可能与 https://github.com/grpc/grpc-java/issues/1768
中登录的内容相同再一次,我只在 Windows 上收到此错误!
无论这个问题如何,应用程序似乎都能正常运行。
当我使用 io.grpc.Server 启动一个简单的 "hello world" 应用程序时,我没有看到此信息堆栈跟踪。
但是当我使用我的真实应用程序时,它在 grpc 服务器和码头服务器之间打开了一个双向 http2 流连接,该连接在应用程序期间保持打开状态...我收到此消息一次-第二次淹没我的日志。
将 NettyServerTransport
日志记录设置为 WARN
级别是否安全?或者我应该担心这条消息的频率?
我发现此消息是由于第三方 java 应用程序上的 tcp 心跳检查器而出现的,我们使用该应用程序来查看我的服务是否已启动。
它发出 InetSocketAddress(ip, port)
请求以检查 http2 端口是否仍在响应。
每次执行此操作时(仅在 Windows 上),它都会转储出令人讨厌的堆栈跟踪。调查原因。
已创建问题:https://github.com/nddipiazza/grpc-java-bidirectional-streaming-example