解决MongoDB占用内存过大频繁死机的方法详解

从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者:

50%(RAM-1 GB),或 256 MB

例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM()。

相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,因为这是总RAM的一半以上减去1 GB()。

// 4GB

0.5 * (4 GB - 1 GB) = 1.5 GB

// 1.25GB

0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB

看完文档,我查看了自己的内存使用

$ free -h
# 没启动mongod
      total    used    free
Mem:     3.7G    2.4G    1.3G
# 启动mongod
      total    used    free
Mem:     3.7G    1.8G    364M

直接占满内存了

参考了一部分网上的文章,大致的意思就是说,MongoDB占用了太多内存,被系统kill掉了,所以出现宕机现象

解决方式

添加两个参数

修改配置 mongodb.conf

# 为高速缓存分配的最大内存量;默认为物理RAM的1/2
# wiredTigerCacheSizeGB <float>
wiredTigerCacheSizeGB=0.5
# 最大同时连接数,默认1000000

更多关于MongoDB占用内存过大的问题解决方法请查看下面的相关链接

(0)

相关推荐

  • MongoDB 内存使用情况分析

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引. 先 ps 一下看看.

  • 解决MongoDB 排序超过内存限制的问题

    对集合执行一个大排序操作(如聚合),出现以下错误:(测试版本:MongoDB 3.0.6) > db.bigdata.aggregate( {$group : {_id : "$range", total : { $sum : 1 }}}, {$sort : {total : -1}} ); #... aggregate failed at Error (<anonymous>) at doassert (src/mongo/shell/assert.js:11:14

  • python监控linux内存并写入mongodb(推荐)

    (需要安装psutil 用来获取服务器资源,以及pymongo驱动)#pip install psutil #pip install pymongo #vim memory_monitory.py 文件内容如下 #!/usr/bin/env python # -*- coding: UTF-8 -*- import psutil import socket import time from pymongo import MongoClient mongodbIp = '192.168.200.1

  • 将MongoDB作为Redis式的内存数据库的使用方法

     基本思想 将MongoDB用作内存数据库(in-memory database),也即,根本就不让MongoDB把数据保存到磁盘中的这种用法,引起了越来越多的人的兴趣.这种用法对于以下应用场合来讲,超实用: 置于慢速RDBMS系统之前的写操作密集型高速缓存 嵌入式系统 无需持久化数据的PCI兼容系统 需要轻量级数据库而且库中数据可以很容易清除掉的单元测试(unit testing) 如果这一切可以实现就真是太优雅了:我们就能够巧妙地在不涉及磁盘操作的情况下利用MongoDB的查询/检索功能.可

  • cgroup限制mongodb进程内存大小

    以限制mongodb的内存大小为例. mkdir /cgroup/memory/test/ echo 50M > /cgroup/memory/test/memory.limit_in_bytes echo 50M > /cgroup/memory/test/memory.memsw.limit_in_bytes cgexec -g memory:test mongod -port 27017 --bind_ip 127.0.0.1 --dbpath /var/lib/mongo 通过cgro

  • 解决MongoDB占用内存过大频繁死机的方法详解

    从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者: 50%(RAM-1 GB),或 256 MB 例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM(). 相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,因为这是总RAM的一半以上减去1 GB(). // 4GB 0.5 * (4 GB - 1 GB) = 1.5 GB // 1.25GB 0.5 * (1.25 GB - 1 GB) =

  • 解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where  Id in (select Id from 表 group by Id having count(Id) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id)

  • 解决plsql连接失败,弹出空白提示框的方法详解

    解决办法:1.win7下以管理员权限运行 2.修改时区 需要文件(前半部分路劲可能不同,以自己的安装路径为准):a:D:\oracle\product\10.2.0\db_1\WJLMGQS-PC_WJLMGQS\sysman\config\emd.propertiesb:D:\oracle\product\10.2.0\db_1\sysman\config\emd.propertiesc:D:\oracle\product\10.2.0\db_1\sysman\admin\supportedt

  • 解决C# winForm自定义鼠标样式的两种实现方法详解

    第一种:(调用系统API)首先引入两个命名空间 复制代码 代码如下: using System.Runtime.InteropServices;using System.Reflection; 导入API 复制代码 代码如下: [DllImport("user32.dll")]public static extern IntPtr LoadCursorFromFile(string fileName);[DllImport("user32.dll")]public

  • MySQL占用内存过大解决方案图文详解

    目录 前言 解决方案 1. 找到配置文件 2. 修改配置文件 3. 重启MySQL 后记 前言 对于部分小资玩家来说,服务器数量和内存往往是很有限的,像我个人的服务器配置就是2核4G5M. 4G内存对于Java玩家来说,真的不大,开几个中间件+自己的微服务真的还蛮挤的,然后又摊上MySQL这个大冤种.我本机上的MySQL仅仅只占几M内存(虽然我不怎么用,但是本机MySQL确实是开着的): 而服务器的则要占400M,怎么说其实没什么吞吐量,纯粹是自己玩一玩,这内存占用属实有点吃不消啊... 解决方

  • PHP内存溢出的解决方法详解

    目录 1.处理数组时出现内存溢出 2.使用sql查询数据,查出来很多,导致内存溢出 3.假定日志中存放的记录数为500000条,那么解决方案如下 4.上传excel文件时,出现内存溢出的情况 什么是内存溢出 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存. 引起内存溢出的原因有很多种,常见的有以下几种: 1 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2 集合类中有对对象的引用,使用完后未清空: 3 代码中存在死循环

  • python爬虫泛滥的解决方法详解

    我们可以把互联网上搬运数据的程序看成小蚂蚁,它们需要采集不同的食物带回洞里存储.但是大家也知道白蚁泛滥的事件,在我们的网络环境里,如果爬虫都集中在某几个位置,最直接的结果就是这个网站的拥挤.对于我们这些网站访问者而言也不是好事情,首先网页的页面会被卡住.网站的管理人员面对爬虫过多,这时候就要进行一系列的限制措施了,这里小编分了两个大的应对方向,从不同的角度进 行分析爬虫过多的解决思路. 一.识别爬虫 1. HTTP请求头 这算是最基础的网络爬虫识别了,正常的网络访问者都是通过浏览器对网站进行访问

  • 对Python中小整数对象池和大整数对象池的使用详解

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收.在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置, 所有位于这个范围内的整数使用的都是同一个对象.同理,单个字母也是这样的. In [1]: a=-5 In [2]: b=-5 In [3]: a is b Out[3]: True In [4]: a

  • SpringBoot整合EasyExcel进行大数据处理的方法详解

    目录 EasyExcel 需要的Maven 基础读案例 操作的excel 实体类 读取监听器 测试 基础写案例 实体类 测试 Excel模板方式 准备模块 实体类 测试 EasyExcel EasyExcel文档 我用过Poi和EasyPoi这些工具总体来说: POI 优点我觉得自由,但是迎来的就是复杂度,和大数据量时候性能的缺点 EasyPoi基于POI 的二次封装,解决了大部分的常用场景,简化了代码,但是特别复杂表格处理还是不行,而且性能的话和poi差不多,简单来说就是简化了Poi的操作,少

  • Flow如何解决背压问题的方法详解

    目录 前言 关于背压(BackPressure) 背压问题是什么 定义背压策略 Flow的背压机制 模拟背压问题 背压处理方式 使用buffer进行缓存收集 使用conflate解决 使用collectLatest解决 小结 前言 随着时间的推移,越来越多的主流应用已经开始全面拥抱Kotlin,协程的引入,Flow的诞生,给予了开发很多便捷,作为协程与响应式编程结合的流式处理框架,一方面它简单的数据转换与操作符,没有繁琐的操作符处理,广受大部分开发的青睐,另一方面它并没有响应式编程带来的背压问题

随机推荐