我们的服务器遇到了一个奇怪的问题. (Debian 8.9)我们有一个API,它是一个PHP应用程序.它请求弹性搜索,该实例位于单独的服务器上.
每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引用者时,一切正常.
解决方法:
我建议在内核中提高somaxconn参数.
添加到/etc/sysctl.conf:
net.core.somaxconn=512
然后运行:
sudo sysctl -p
同样在/etc/redis.conf中将tcp-backlog提升为(或更多):
tcp-backlog 512
TCP listen() backlog.
In high requests-per-second environments you need an high backlog in
order to avoid slow clients connections issues. Note that the Linux
kernel will silently truncate it to the value of
/proc/sys/net/core/somaxconn so make sure to raise both the value of
somaxconn and tcp_max_syn_backlog in order to get the desired effect.