我有两个使用MemcacheD存储常见数据库查询结果的Web服务。这两种服务都在三个负载均衡的Web服务器上运行,MemcacheD也是如此,性能也很好。但是,每两周一次的Web服务的CPU使用率从正常的5%增加到20%。我发现如果我重新启动Memcache,那么这就解决了问题。这个特殊的Web服务更多地使用MemCacheD并存储更大的对象
我认为问题不在于我的网络服务(我知道的着名遗言),因为在重新启动Memcache后,CPU和内存使用量会稳定并保持几天。
我认为Memcache可能存在问题,无论是使用它还是我设置它的方式。如果我不得不猜测我的问题就是'捶打',因为我的网络服务不得不等待从Memcache获取一个对象。
可能是我的Memcache版本太旧(I got it from here)或者我没有给它足够的内存。每个实例当前分配128 MB。这太低了吗?我可以使用任何工具来衡量Memcache的性能吗?
修改
我增加了分配给500MB的内存,发现只需要重新启动一个Memcache实例。这指出问题不在于Memcache,而在于我在那里使用一个特定对象的方式。我希望尽快解决这个问题。如果这有所不同,我会发布这个问题的答案。
答案 0 :(得分:1)
我在MemcacheD中存储两种类型的数据:一种是纯粹的信息,类似于“瑞士的资本”,另一种是用作内存存储的列表。后者导致了这个问题。其中一个清单没有被清除,因此不断增长。这就是重新启动似乎有效的原因,因为列表现在是空的。
MemcacheD不会自动删除已过期“到期”日期的项目。它将做什么是在需要时删除过期的项目。因此,此列表从未被删除。当MemcacheD存储项目时,它将它们存储在“页面”上。这些页面将类似大小的项目组合在一起。因此,将有一个用于16KB项目,另一个用于32KB项目,依此类推。显然,随着一个不断增长的列表,这也将使MemcacheD比它需要的更加努力。