ILD

水线太高,导致MemAvailable比MemFree少的问题
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2023-8-7 站点:Inside Linux Development

最近一个项目需要统计设备的剩余内存,之前都是用/proc/meminfo里面的MemFree,发现MemFree实际上统计得少了,因为那些可清理的page cache,实际上是可用的内存。于是改成了MemAvailable,但是在另外一个项目发现,MemAvailable竟然比MemFree还少一大截。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
root@XiaoQiang:/tmp# cat /proc/meminfo
MemTotal:         246768 kB
MemFree:           90588 kB
MemAvailable:      53592 kB
Buffers:             280 kB
Cached:            36572 kB
SwapCached:            0 kB
Active:            57928 kB
Inactive:          26892 kB
Active(anon):      51964 kB
Inactive(anon):     9860 kB
Active(file):       5964 kB
Inactive(file):    17032 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         48008 kB
Mapped:            22864 kB
Shmem:             13884 kB
Slab:              22060 kB
SReclaimable:       3084 kB
SUnreclaim:        18976 kB
KernelStack:        1560 kB
PageTables:          892 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      123384 kB
Committed_AS:      93648 kB
VmallocTotal:    1048372 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB


搜索一番发现,MemAvailable表示application可用内存的一个估计,这个值是不准确的。他大概等于free加上可回收的内存减去水线。


Currently, the amount of memory that is available for a new workload, without pushing the system into swap, can be estimated from MemFree, Active(file), Inactive(file), and SReclaimable, as well as the "low" watermarks from /proc/zoneinfo.


原来是设备的水线设置的太高了

root@XiaoQiang:/tmp# cat /proc/sys/vm/min_free_kbytes 

32768


将其设置为3000之后,

# echo 3000 > /proc/sys/vm/min_free_kbytes


available就非常多了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
root@XiaoQiang:/tmp# cat /proc/meminfo
MemTotal:         246768 kB
MemFree:           85148 kB
MemAvailable:     105204 kB
Buffers:            2228 kB
Cached:            39244 kB
SwapCached:            0 kB
Active:            63480 kB
Inactive:          26480 kB
Active(anon):      52680 kB
Inactive(anon):     9708 kB
Active(file):      10800 kB
Inactive(file):    16772 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         48512 kB
Mapped:            22864 kB
Shmem:             13900 kB
Slab:              22348 kB
SReclaimable:       3232 kB
SUnreclaim:        19116 kB
KernelStack:        1544 kB
PageTables:          892 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      123384 kB
Committed_AS:      94472 kB
VmallocTotal:    1048372 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB


参考:

https://stackoverflow.com/questions/30869297/difference-between-memfree-and-memavailable

https://unix.stackexchange.com/questions/500400/memavailable-higher-than-expected


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.