linux问题-memory free 大于 available 怪异现象分析
问题
监控频繁报警,提示ECS实例内存使用率已超过90%,但ECS实例是跳板机,系统中并无特别占用内存的应用,且实际内存使用率不足20%。
系统
Centos 7.2
问题分析
1、内存不足,先查看实际内存使用情况
#free -mtotal used free shared buff/cache available
Mem: 3648 331 2837 8 479 503
Swap: 0 0 0
可以看到总内存3648MB,已使用331MB,剩余物理内存是2837MB,但是available内存为503MB。
可用内存的理解:
- free:尚未被使用的物理内存
- available:是应用程序可申请的内存。
一般情况下available = free + buff + cache,但现在内存的数据明显是不符合上述公式的。那么什么情况下会出现available小于free呢?
lInux系统中有两种内存是不被计算在available中的,分别是:
- hugepage大页
- min_free_kbytes操作系统最小保留内存
2、hugepage大页
- 查看服务器的大页参数配置
#cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
可以看到当前系统的页大小为2048kb,相对比较小。
- 内核参数
#sysctl vm.nr_hugepeages
sysctl: cannot stat /proc/sys/vm/nr_hugepeages: No such file or directory
内核参数也没有配置大页。
3、min_free_kbytes操作系统最小保留内存
#sysctl vm.min_free_kbytes
vm.min_free_kbytes = 2097152
可以看到系统设置的最小预留内存大小为2097125kb,即2GB,占系统总内存的50%左右,相当于任何时候,系统会保留50%的内存已备不时之需,防止系统oom奔溃。
解决方案
调小min_free_kbytes参数值,调整为系统内存的15%-20%合理区间
echo 629145 > /proc/sys/vm/min_free_kbytes
sysctl -p
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
