MongoDB占用内存定位和释放

问题:芒果占 Swap 占用超过50%

1 Linux Swap 内存交换空间

当 Linux 内存空间紧张的时候,Linux 通过直接内存回收 和 定期扫描的方式,来释放文件页 和 匿名页,以便把内存分配给更需要的进程使用。

  • 文件页回收即 清空,或者脏数据写盘,释放

  • 匿名页回收,即 Swap 写入磁盘中,下次使用时再从磁盘中取出 。

  • 查看swap 占用 :free -m

  • 查看系统内存

[root@nbprdapp55 ~]#  cat /proc/meminfo |grep Mem
MemTotal:       16332236 kB
MemFree:        12557660 kB
  • linux 内存回收的机制

MongoDB占用内存定位和释放_第1张图片

pages_low 这个值被称为页低阈值,当剩余内存小于页低阈值 就会触发内存的回收

linux 中有一个kswpd0 进程,会定期扫描内存使用情况

[root@nbprdapp55 ~]# cat /proc/sys/vm/min_free_kbytes
67584   66MB

这个内核选项可以设置 pages _min 值 ,而 另外两个页内存阈值,可以通过下面的公式得出

pages_low = pages_min*5/4
pages_high = pages_min*3/2

设置 Swap 使用的积极程度,

[root@nbprdapp55 ~]# cat /proc/sys/vm/swappiness
 60

这个值 可以被设置为 0 - 100 。越大越趋向于使用 Swap ,越小越趋向于使用回收文件页,即便设置为0,当 剩余内存 + 文件页大小 小于 页高阈值 时,还是会触发 Swap 回收 。

1.1 swap 定位和释放

  • 定位
    1 查看 swap 使用最多的进程
    Top shift + O ,P

  • 释放

1 KIll 对应的  PID     
2 swapoff -a && swapon -a

2 芒果的内存使用

1 停止 mongodb 的几种方法:

向 MongoDB 发送一个 SIGINT SIGTERM 信号
1. KILL -2 PID
   KiLL PID
等待当前运行的操作或者文件预分配完成,关闭连接,将缓存的数据刷新到磁盘,停止
SIGKILL -9 PID (X) 不建议,会损坏文件,强行停止 ,需要修复数据库


2 . > use admin 
     switched to db admin
     > db.shutdownServer();
     server should be down ...

2 . 监控 MongoDB

> db.runCommand({"serverStatus" : 1})
{
    ...
}

3限制 芒果内存使用
MongoDB占用内存定位和释放_第2张图片

小结

hadoop 集群建议关 swap 提升性能。事实上不仅 hadoop,包括 ES 在内绝大部分 Java
的应用都建议关 swap,这个和 JVM 的 gc 有关,它在 gc 的时候会遍历所有用到的堆的内存,如果这部分内存是被 swap 出去了,遍历的时候就会有磁盘IO 。
如果服务器内存够用的情况下,可以建议关闭 Swap 。

你可能感兴趣的:(linux)