2017-04-08 127 views
1

在我们的系统中出现了一个奇怪的问题。网络问题geode客户端无法连接到服务器和定位器

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

回答

0

我不确定您的意思是由SYS_RECV。这不是我熟悉的状态。你的意思是SYN_RECV? SYN_RECV状态表示已收到连接请求,正在等待后续处理。有很多这些或只有一个,并且那个匹配定位器配置使用的端口?定位器的线程转储将帮助显示它的功能。

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

+0

是的我修改SYN_RECV,我已经编辑了这个问题。 实际上有很多SYN_RECV – mdavid

0

就Geode而言,我能想到的唯一的办法就是在定位器上设置一个较低的读超时值。默认值是60000毫秒。

-Dgemfire.TcpServer.READ_TIMEOUT = 10000

从几乎没有一个基于Java的服务器可以做丢弃的SYN ACK的

除了。我假设你已经搜索了互联网,发现很多页面都在讨论这个问题。