1

我有两个使用 MemcacheD 存储常见数据库查询结果的 Web 服务。这两个服务都运行在三个负载均衡的 Web 服务器上,MemcacheD 也是如此,并且性能很好。但是,每两周一次,Web 服务的 CPU 使用率会从更正常的 5% 增加到 20%。我发现如果我重新启动 Memcache,那么问题就解决了。这个特定的 Web 服务更多地使用 MemCacheD 并存储更大的对象

我认为问题不在于我的 Web 服务(我知道的著名的遗言),因为在重新启动 Memcache 后,CPU 和内存使用情况会稳定下来并持续数天。

我认为 Memcache 的使用或设置方式可能存在问题。如果我不得不猜测,我会说问题是“抖动”,因为我的 Web 服务必须等待从 Memcache 获取对象。

可能是我的 Memcache 版本太旧(我从这里得到的)或者我没有给它足够的内存。当前为每个实例分配了 128 MB。是不是太低了?有什么工具可以用来衡量 Memcache 的性能以提供帮助吗?

编辑

我已将分配的内存增加到 500MB,发现只需要重新启动 Memcache 的一个实例。这表明问题不在于 Memcache,而在于我在那里使用一个特定对象的方式。我希望尽快解决这个问题。如果这有所作为,我会发布这个问题的答案。

4

1 回答 1

1

我在 MemcacheD 中存储了两种类型的数据:一种是本质上类似于“瑞士首都是什么”的纯信息,另一种是用作内存存储的列表。正是后者导致了问题。其中一个清单没有被清除,因此不断增长。这就是重新启动似乎起作用的原因,因为列表现在是空的。

MemcacheD 不会自动删除已超过“到期”日期的项目。它将做的是在需要时删除过期的项目。因此,该列表从未被删除。当 MemcacheD 存储项目时,它会将它们存储在“页面”上。这些页面将大小相似的项目组合在一起。因此将有一个用于 16KB 的项目,另一个用于 32KB 的项目,依此类推。显然,随着列表的不断增长,这也会使 MemcacheD 工作得比它需要的更努力。

于 2014-04-23T09:42:15.603 回答