我们的服务器遇到了一个奇怪的问题。 (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 的值以获得所需的效果。