processone/tsung

Incorrect freemem report in docker containers

durigon opened this issue · 0 comments

When using the Erlang agent to monitor OS, I found that the free memory collection in the docker container was incorrect.

We use 'MemAvailable' to get a free memory in the linux system when using the erlang agent.

MemAvailable %lu (since Linux 3.14)
An estimate of how much memory is available for starting new applications, without swapping.

In a container, MemAvailable should be the sum of MemFree, Cached and Buffers, but it is the same as MemFree.
After all, we can be mistaken for a memory leak because it does not include Cached/Buffers memory.

docker-container# egrep "MemFree|MemAvail|^Cached|Buffers" /proc/meminfo
MemFree: 93009720 kB
MemAvailable: 93009720 kB
Buffers: 0 kB
Cached: 7712588 kB

docker-container# uname -r
4.19.55

In a Host machine, MemAvailable is MemFree + Buffers + Cached.

host-machine# egrep "MemFree|MemAvail|^Cached|Buffers" /proc/meminfo
MemFree: 339513028 kB
MemAvailable: 381096504 kB
Buffers: 15072 kB
Cached: 37029112 kB

host-machine# uname -r
4.19.55