我们正在使用PHP,并且正在使用memcached v1.4.6进行缓存。我们正在使用来自PECL的memcache扩展memcache-2.2.6。我们使用持久连接来连接到memcached。随着密钥数量的增加,PHP memcache返回false
最近我们做了一些改变,使存储在memcached中的键的数量增加了一倍。这些按键的最大长度为75到80个字符。存储的值是整数。
每当我们尝试使用新代码时,系统在前几秒(通常少于10秒)内都能正常工作。在开始的几秒钟之后,memcache开始为每个请求返回“false”(获取,设置,增量)
如果在此阶段我们恢复到旧代码,事情再次开始正常工作。
我们的memcached服务器上的请求速率是每秒约270个请求(使用旧代码)。预计这个新代码每秒会增加超过1000个请求。
当memcache开始返回“false”时,大约15%的分配内存空闲。
什么可能导致此行为?
是做什么用的命令启动memcached服务器?也许这是一个最大的内存问题,你说它什么时候开始重复虚假,只有15%的内存是空闲的,是整个操作系统内存,还是仅仅为memcached分配的内存? – capi 2012-03-29 15:25:41
我们使用以下命令启动memcached服务器:'/ usr/bin/memcached -d -m 2048 -u root'。当它开始返回“false”时,分配给memcached的内存的15%是空闲的。如果我错了,请纠正我,但即使在没有空闲内存的情况下,当我们发出'set'命令时,memcached也不应该逐出旧的项目。在这种情况下,对“set”的响应不应该是“false”。谢谢。 – Nikhil 2012-03-30 03:15:10
尝试使用munin或phpmemcachedadmin查看驱逐率(非常容易安装,请在我的帖子下面链接)。可能会提供更多关于memcached内部进行的信息。您也可以深入到平板并查看存储的项目及其值。作为最后的手段,尝试使用Memcached库,它有更多的运行时选项,代码类似,如果你已经有了一个包装器,可能不会有如此大的改变。 – capi 2012-03-30 11:11:43