PHP memcache没有关闭连接


PHP memcache not closing connections?

我在各种web服务器上使用PHP-memcache来连接memcache服务器。

我这样连接:

$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);

然后使用get & set获取或设置数据。

它在大多数情况下工作得很好,但如果有些事情变慢了,那么我看到memcache连接突然增加,这将产生问题。

我认为这是因为默认情况下addServer创建持久连接&可能在服务请求后没有迅速关闭它们。

这里也报告了类似的问题。

所以请让我知道这只是因为addServer函数的默认行为。我应该使用非持久连接通过传递false作为addServer函数的第三个参数。

如果客户端没有显式关闭memcached打开的连接,内核可能会将其保持在keepalive模式,因此降低以下参数可能会有所帮助,但会影响任何其他连接,如SSH。因此,将tcp_keepalive_time设置得太低并不是一个好主意。
创建以下文件:

vim /etc/sysctl.d/low-tcp-timeout.conf
# Keep connections in keepalive for 600 seconds. Default 7200s = 2h.
net.ipv4.tcp_keepalive_time = 600
# 0 probes. Default 9
net.ipv4.tcp_keepalive_probes = 0
# Default 75 seconds between each probe
net.ipv4.tcp_keepalive_intvl = 75

并运行sysctl -p来应用这些值。你也可以看看net.ipv4.tcp_fin_timeout