Linux available 占大量内存
问题分析
1、内存不足,先查看实际内存使用情况
#free -m
total 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
这个问题描述的是在Linux系统中,可用内存(available memory)数量很大,接近于总内存数量。这通常不是一个错误,而是Linux内核的一个特性,它尝试保持一定的内存缓存,以便加速后续的程序启动和运行。
如果你的系统经常需要交换内存(swap),或者你希望减少available内存数,以便更准确地估计系统当前可以直接使用的内存量,你可以通过调整系统参数来实现。
解决方法:
如果你想减少 available 内存,可以通过设置vm.min_free_kbytes
参数来减少内核保留的最小内存量。这可以通过sysctl命令来完成:
sudo sysctl -w vm.min_free_kbytes=250000
这个命令将最小可用内存设置为250000KB。你可以根据系统的实际需求调整这个值。
另一种方法是通过调整vm.vfs_cache_pressure
参数来调节内核的内存回收行为。这个参数决定了内核在回收内存时,优先考虑缓存哪种类型的对象。设置为0会优先考虑缓存Dirty和Mapped对象,设置为100会优先考虑缓存文件页,这可以通过以下命令进行设置:
sudo sysctl -w vm.vfs_cache_pressure=50
请注意,调整这些参数可能会影响系统性能,因此需要根据实际情况谨慎操作。
最后编辑:Jeebiz 更新时间:2024-11-01 12:20