Php memcache连接的数量从未下降,一直在增长

Php memcache连接的数量从未下降,一直在增长,php,memcached,Php,Memcached,我们已经为我们的web应用程序设置了三个memcache服务器 其中两个做得很好,处理了数以万计的读写操作,同时每个都保持不超过12个连接(根据数据) 我们有第三个memcache服务器,负责存储管理客户端会话数据(使用)和一些随机应用程序数据。由于某些原因,此框上的连接数从未下降,只是随着时间的推移而增加。例如,我们最近重新启动了服务器,一小时后memcache top记录了约300个连接 代码库混合使用了持久连接和动态连接,但我无法提供一个简单的示例来重新创建连接永不消亡的情况。第三个mem

我们已经为我们的web应用程序设置了三个memcache服务器

其中两个做得很好,处理了数以万计的读写操作,同时每个都保持不超过12个连接(根据数据)

我们有第三个memcache服务器,负责存储管理客户端会话数据(使用)和一些随机应用程序数据。由于某些原因,此框上的连接数从未下降,只是随着时间的推移而增加。例如,我们最近重新启动了服务器,一小时后memcache top记录了约300个连接

代码库混合使用了持久连接和动态连接,但我无法提供一个简单的示例来重新创建连接永不消亡的情况。第三个memcache服务器实际上承载着web应用程序中最不活跃的部分,正如您从memcache top中看到的:

memcache-top v0.6  (default port: 11211, color: on, refresh: 3 seconds)

INSTANCE         USAGE  HIT %  CONN  TIME   EVICT/s READ/s  WRITE/s  
memcache1:11211  15.7%  83.5%    10  1.2ms      0.0  24.9K    34.5K  
memcache2:11211  15.8%  81.3%    10  1.0ms      0.0  19.1K    31.6K  
memcache3:11211  0.1%   0.0%    354  1.1ms      0.0      4      321  

AVERAGE:    10.5%  55.0%  124  1.1ms  0.0  14.7K  22.1K  

TOTAL:    0.6GB/  6.0GB    374  3.2ms  0.0  44.0K  66.4K

所以我的问题是:为什么这个memcache实例的连接永远不会消失?

PHP中的持久连接将为每个apache工作进程分配一个连接。Apache设置是否允许~354个工作进程?

您的session.gc\u概率和session.gc\u除数设置为多少?
一些Linux发行版覆盖这些值,并添加cronjob以清除会话。您的问题可能是由这种行为引起的。

您使用的是PHP5吗?很可能是的。这里有一个可能的陷阱:

从PHP5.0.5开始,写入并关闭 处理程序在对象之后调用 破坏,因此不能使用 对象或抛出异常。这个 但是,对象析构函数可以使用 会议

可以打电话 来自的会话_write_close() 析构函数来解决这只鸡和 鸡蛋问题


您想赌多少memcache会话处理程序在此更改之前就没有被重新访问过?作为解决方案或至少是诊断,我建议您编写自己的memcached会话打开/关闭/读/写和销毁函数(而不是对象),将它们与会话_set _save _处理程序连接,并使用内置的处理程序跳过。至少您可以记录内部情况。

Q1。第三个“麻烦”的服务器是一个*BSD,而这两个“好”的服务器是Linux吗?问题2。所有3个Memcache的CPU使用百分比是多少?作为记录/调试自定义会话处理程序的旁注-在内容刷新到页面后出现write()方法时,您需要使用与file_put_contents()类似的内容。