问题:芒果占 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 内存回收的机制
文章图片
pages_low 这个值被称为页低阈值,当剩余内存小于页低阈值 就会触发内存的回收
linux 中有一个kswpd0 进程,会定期扫描内存使用情况
[root@nbprdapp55 ~]# cat /proc/sys/vm/min_free_kbytes
6758466MB
这个内核选项可以设置 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占用内存定位和释放】hadoop 集群建议关 swap 提升性能。事实上不仅 hadoop,包括 ES 在内绝大部分 Java
的应用都建议关 swap,这个和 JVM 的 gc 有关,它在 gc 的时候会遍历所有用到的堆的内存,如果这部分内存是被 swap 出去了,遍历的时候就会有磁盘IO 。
如果服务器内存够用的情况下,可以建议关闭 Swap 。
推荐阅读
- Linux|109 个实用 shell 脚本
- linux笔记|linux 常用命令汇总(面向面试)
- Linux|Linux--网络基础
- linux|apt update和apt upgrade命令 - 有什么区别()
- linux|2022年云原生趋势
- Go|Docker后端部署详解(Go+Nginx)
- 开源生态|GPL、MIT、Apache...开发者如何选择开源协议(一文讲清根本区别)
- GitHub|7 款可替代 top 命令的工具