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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部