我有一个mongod进程运行在一个webfaction服务器上,内存为512mb。我有一个MongoDB数据库,有两个大小分别为10MB和2GB的集合。每当我通过mongo shell对我的集合运行查询时,ram的使用率就会异常高,服务器会被宿主提供程序自动终止。
有没有办法控制mongod服务器的内存使用?我做错什么了?
PS:请引导我,因为我对MongoDB还不太熟悉,而且还做了一些尝试。
最佳答案
这是一个有问题的设置,从代码方面来说,对此您无能为力。问题是你的应用程序因为需要RAM而被终止。MongoDB对RAM非常贪心,会尽可能地获取内存。通过小心地避免较大的结果集和大量的数据,您可能会稍微延迟这个问题,但是如果不可能的话,为什么首先要使用web规模的数据库呢?
使用一个提供了固定数量ram的提供者,这样mongodb就知道它可以分配多少ram。这可能不是很快,但至少它不会突然终止服务。
即使有很好的索引,至少索引应该适合ram。如果操作系统需要100MB(这是非常保守的),那么10GB的数据存储空间只剩下400MB。实际上,ram中的实际数据存储可能只剩下200mb,而对于10gb数据库来说,这似乎是低端的。
即使如此,也不要针对不必要的强大限制对软件进行编码。拥有1-2gb内存的虚拟机并没有那么贵,但更重要的是,要确保内存得到保证和修复(没有“boost”内存)。