1

我们的系统出现了一个奇怪的问题。

例如,我们有一个由 2 个节点组成的集群。Geode Locator 在主节点上运行,并且有一个远程节点运行 Geode 客户端。当客户端出现网络问题(丢包)一段时间后,客户端无法连接到Locator(NoAvailableLocatorException)。奇怪的是,即使在网络进入正常状态后,客户端仍然无法连接到定位器,同样的异常,即使在重新启动客户端后也是如此。经过调查,我们发现 Locator 的端口卡在 SYN_RECV 上,所以当我们重新启动 Locator 时,问题似乎消失了。您能否提供任何线索我们如何解决此问题以及为什么服务器端口卡在 SYN_RECV 上,因为我们不想重新启动集群或找出定位器和服务器并重新启动它们中的每一个。

4

2 回答 2

0

我不确定你所说的 SYS_RECV 是什么意思。这不是我熟悉的状态。你的意思是SYN_RECV?SYN_RECV 状态表示已收到连接请求,正在等待后续操作。是否有很多这些或只有一个与定位器配置使用的端口匹配?定位器的线程转储将有助于显示它的用途。

定位器有一个用于定位服务处理的服务器套接字。服务器套接字应该在配置的定位器套接字上处于 LISTEN 状态,等待连接请求。这些连接被移交给线程池,从套接字读取请求数据并处理请求。这些套接字应该处于 ESTABLISHED 状态。同一个线程将在同一个套接字上发回响应。在客户端读取响应后,与定位器的连接被中止,以避免套接字处于 TIME-WAIT 状态。

于 2017-04-11T22:50:42.503 回答
0

就 Geode 而言,我能想到的唯一可能会有所帮助的是在定位器上设置较低的读取超时。默认值为 60000 毫秒。

-Dgemfire.TcpServer.READ_TIMEOUT=10000

除此之外,基于 Java 的服务器对于丢弃的 SYN ACK 几乎无能为力。我假设您已经搜索了互联网并找到了很多关于这个问题的页面。

于 2017-06-16T17:10:57.057 回答