我有一个在512f RAM的webfaction服务器上运行的mongod进程。我有一个MongoDB数据库,有两个大小为10MB和2GB的集合。每当我通过mongo shell对我的集合运行查询时,RAM使用率会异常高,服务器会被托管服务提供商自动终止。
有没有办法控制mongod服务器的内存使用量?我究竟做错了什么? PS:请指导我,因为我是MongoDB的新手并进行了一些实验。
答案 0 :(得分:1)
这是一个有问题的设置,你可以从代码方面做很多事情。问题是您的应用程序因为需要RAM而被杀死。 MongoDB对RAM非常贪婪,并会尝试尽力而为。通过仔细避免更大的结果集和大量数据,您可能会稍微延迟这个问题,但是如果不可能的话,为什么你会首先使用网络规模的数据库呢?
使用提供固定数量RAM的提供程序,以便MongoDB知道它可以分配多少RAM。这可能不会很快,但至少它不会简单地从无处杀死服务。
即使你有非常好的索引,至少索引应该适合RAM。如果操作系统需要100MB(非常保守),那么只剩下400MB用于10GB数据存储。实际上,RAM中的实际数据存储量可能只有200MB左右,对于10GB数据库来说,这似乎是低端的。
即便如此,也不要将软件编码为不必要的强大限制。具有1-2GB RAM的虚拟机并不昂贵,但更重要的是,确保RAM得到保证和修复(没有“提升”RAM)。
答案 1 :(得分:0)
避免因为内存而导致mongodb崩溃的另一种方法是向操作系统添加交换,但是当数据库很大时会降低性能。
我已经按照How To Add Swap on Ubuntu 14.04中的步骤进行操作,因为我的mongodb实例永远不会崩溃。我在512MB AWS实例上运行带有1.5GB集合和多个512MB集合的mongodb。