【发布时间】:2015-09-13 13:39:34
【问题描述】:
arangod 运行了一段时间没有任何问题,但在某些时候无法建立更多连接。 然后 aranogsh 显示以下错误消息:
错误消息'Could not connect to 'tcp://127.0.0.1:8529''connect() failed with #99 - Cannot assign requested address''
在日志文件中arangod还是写了更多的trace信息。
重新启动araogd后,它再次运行没有问题,直到问题突然再次出现。
为什么会这样?
【问题讨论】:
-
您能否提供更多上下文,例如您在哪个平台上使用哪个版本的 ArangoDB,以及有关当时无法建立进一步连接的工作负载的一些信息。此外,在无法建立连接后,arangod 会在日志文件中记录哪些跟踪信息?当无法建立进一步的连接时,您能否确认 arangod 进程仍在运行?
-
我做了一些分析,发现站立时arangod总是在FIN_WAIT2(netstat)上挂一个端口。目前运行的系统版本为 2.6.7 关于 Node.js 和 Java 客户端的观点。
-
当时系统是否有可能耗尽了临时端口?例如,当您为每个请求建立新连接时,操作系统将为每个连接分配一个新的临时端口。如果您在短时间内建立大量新连接,系统可能会耗尽临时端口。如果是这种情况,问题应该会在一段时间后自动消失,具体取决于 TCP 堆栈配置。你能检查一下你是否总是在建立新的连接,或者你是否使用了某种可以重用现有连接的连接池?
-
您能否检查一下您是否使用 HTTP/1.1 和 Keep-Alive 进行连接?使用 HTTP/1.1 和 Keep-Alive 将是有益的,至少与 HTTP 1.0 和不使用 Keep-Alive 相比是这样。当然,在客户端重用连接以从 Keep-Alive 中受益是有意义的。
-
连接使用 Keep-Alive 1000 毫秒。我计算了 netstat 上的开放端口,当挂起时,它在 20 到 100 之间。操作系统是 debian。
标签: arangodb