由于在EC2实例上使用了所有内存,MongoDB性能变慢

时间:2011-12-31 05:27:51

标签: java memory mongodb amazon-ec2 ram

我们在EC2上创建了mongodb分片,每个服务器有2个m2-xlarg服务器,1个m2xlarge实例作为configdb和mongos。

我们已经完成了测试,可以插入1.1亿个文档。每个文档大小为0.3 KB。它给出了每秒55,000次写入的预期结果。

但是,我们观察到,只要内存使用量接近15GB(实例的RAM量),Mongo的插入性能就会下降到每秒1000次插入,然后它会慢慢停止接受任何新的插入请求。

假设缓存正在使用所有RAM,那么性能问题是可以理解的。

我们重新启动了所有服务器,重新启动后,我们仍然发现mongo在前几百次插入后表现不是很慢。

任何人都可以告诉我们这里可能出现的问题吗?

我们假设当Mongo缓存大小接近实例的RAM限制(因此使用所有RAM)时,性能会受到影响。但是,我们感到惊讶的是,一旦服务器重新启动并释放内存,性能就无法恢复。

1 个答案:

答案 0 :(得分:3)

根据我的经验,相对于其他解决方案,EC2 IO性能非常差。当所有内容都在RAM中时,MongoDB运行得非常快,但是当包含索引的集合不再适合RAM时,依赖非常快的IO来继续执行。

我建议测量你的EC2实例的IO性能。

如果您还没有,可以通过将多个EBS卷分离为RAID配置来显着改善EC2的IO。尽管如此,我预计它会比例如专用的SAN。

如果你无法从EC2获得足够的IO,你的选择可能是使用更多的实例来保存RAM,或者离开EC2。