为啥 gRPC 仅在 Windows 上每秒抛出“已建立的连接被主机中的软件中止”?
Posted
技术标签:
【中文标题】为啥 gRPC 仅在 Windows 上每秒抛出“已建立的连接被主机中的软件中止”?【英文标题】:Why does gRPC throw an "established connection was aborted by the software in your host machine" every second on windows only?为什么 gRPC 仅在 Windows 上每秒抛出“已建立的连接被主机中的软件中止”? 【发布时间】:2017-10-10 03:23:54 【问题描述】:仅在 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$5.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”应用程序时,我看不到这个 INFO 堆栈跟踪。
但是当我使用我的真实应用程序时,该应用程序在 grpc 服务器和在应用程序期间保持打开状态的码头服务器之间打开双向 http2 流连接...我每秒收到此消息泛滥我的日志。
将NettyServerTransport
日志转为WARN
级别是否安全?还是我应该担心这条消息的频率?
【问题讨论】:
【参考方案1】:我发现这条消息的出现是因为第三方 Java 应用程序上的 tcp 心跳检查器,我们使用它来监视我的服务是否启动。
它发出InetSocketAddress(ip, port)
请求以检查http2 端口是否仍在响应。
每次执行此操作(仅在 Windows 上)时,它都会输出烦人的堆栈跟踪。调查原因。
已创建问题:https://github.com/nddipiazza/grpc-java-bidirectional-streaming-example
【讨论】:
以上是关于为啥 gRPC 仅在 Windows 上每秒抛出“已建立的连接被主机中的软件中止”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 HTML5 地理定位代码不能仅在 iOS 上获取用户的位置?
为啥 LWJGL 仅在 Windows 上在以前和当前的游戏状态之间闪烁?
仅在 Windows 10 中,Java Keyevent 不起作用..在 Windows 7 和 8 中它运行良好..我不知道为啥