Warning
The memory ballast extension is deprecated in favor of using the GOMEMLIMIT
environment variable.
This environment variable is available on any Collector built with Go 1.19 or higher. Official binary releases are built with Go 1.19 since v0.61.0. See issue 8343 for the deprecation timeline.
To migrate to GOMEMLIMIT
, set its value to 80% of the hard memory limit of your Collector.
For example, if the Collector hard memory limit is 1GiB, set GOMEMLIMIT
to 800MiB
.
Check the Go documentation for more information about GOMEMLIMIT
's syntax.
Status | |
---|---|
Stability | deprecated |
Distributions | core, contrib |
Issues |
Memory Ballast extension enables applications to configure memory ballast for the process. For more details see:
The following settings can be configured:
size_mib
(default = 0, disabled): Is the memory ballast size, in MiB. Takes higher priority thansize_in_percentage
if both are specified at the same time.size_in_percentage
(default = 0, disabled): Set the memory ballast based on the total memory in percentage, value range is1-100
. It is supported in both containerized(eg, docker, k8s) and physical host environments.
How ballast size is calculated with percentage configuration
When size_in_percentage
is enabled with the value(1-100), the absolute ballast_size
will be calculated by
size_in_percentage * totalMemory / 100
. The totalMemory
can be retrieved for hosts and containers(in docker, k8s, etc) by the following steps,
-
Look up Memory Cgroup subsystem on the target host or container, find out if there is any total memory limitation has been set for the running collector process. Check the value in
memory.limit_in_bytes
file under cgroup memory files (eg,/sys/fs/cgroup/memory/memory.limit_in_bytes
). -
If
memory.limit_in_bytes
is positive value other than9223372036854771712
(0x7FFFFFFFFFFFF000
). Theballast_size
will be calculated bymemory.limit_in_bytes * size_in_percentage / 100
. Ifmemory.limit_in_bytes
value is9223372036854771712
(0x7FFFFFFFFFFFF000
), it indicates there is no memory limit has been set for the collector process or the running container in cgroup. Then thetotalMemory
will be determined in next step. -
if there is no memory limit set in cgroup for the collector process or container where the collector is running. The total memory will be calculated by
github.com/shirou/gopsutil/v3/mem
[link] onmem.VirtualMemory().total
which is supported in multiple OS systems.
Example: Config that uses 64 Mib of memory for the ballast:
extensions:
memory_ballast:
size_mib: 64
Config that uses 20% of the total memory for the ballast:
extensions:
memory_ballast:
size_in_percentage: 20