API 和 Elasticsearch 服务器之间每 2 小时超时一次

API 和 Elasticsearch 服务器之间每 2 小时超时一次

我们的服务器遇到了一个奇怪的问题。 (Debian 8.9) 我们有一个 API,它是一个 PHP 应用程序。它请求一个elasticsearch,该实例位于单独的服务器上。

每 2 小时,我们就会遇到错误 500,它持续 1 到 2 分钟,很少会更长:

[2017-10-19 20:52:10] +2 hours
[2017-10-19 22:51:59] +2 hours
[2017-10-20 00:52:02] +2 hours
[2017-10-20 02:52:14] +2 hours
[2017-10-20 04:52:28] +2 hours

有时是+4小时或+6小时。

这是错误的详细信息:

request.CRITICAL: Uncaught PHP Exception Elastica\Exception\Connection\HttpException: 
"Operation timed out" 

这是很清楚的。 API 尝试连接到elasticsearch 实例,直到达到http 客户端指定的超时。

什么可能导致这种情况?遇到这样的问题该如何调试呢?

当然,稍后检查所有 URL 引用时,一切正常。

答案1

我建议提高内核中的 somaxconn 参数。

添加/etc/sysctl.conf

net.core.somaxconn=512

然后运行:

sudo sysctl -p

也在/etc/redis.conf加注中tcp-backlog如(或更多):

tcp-backlog 512

从redis配置文件中:

TCP Listen() 积压。

在每秒请求数较高的环境中,您需要较高的积压,以避免客户端连接速度缓慢的问题。请注意,Linux 内核会默默地将其截断为 /proc/sys/net/core/somaxconn 的值,因此请确保同时提高 somaxconn 和 tcp_max_syn_backlog 的值以获得所需的效果。

答案2

他们终于找到了问题所在。根本原因是完全愚蠢的。事实上,es集群的监控视图向es发送了大量查询。大约是应用程序本身的 6 倍!

es 反式日志

正如您所看到的,每 2 小时内存就会过高,并且服务器在几分钟内不可用,直到清除内存(垃圾收集器)为止。

其他参数也得到优化和/或增加。

相关内容