mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-15 00:13:30 +01:00
36 lines
822 B
Go
36 lines
822 B
Go
|
package memory
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"strconv"
|
||
|
"syscall"
|
||
|
|
||
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
||
|
)
|
||
|
|
||
|
func sysTotalMemory() int {
|
||
|
var si syscall.Sysinfo_t
|
||
|
if err := syscall.Sysinfo(&si); err != nil {
|
||
|
logger.Panicf("FATAL: error in syscall.Sysinfo: %s", err)
|
||
|
}
|
||
|
totalMem := int(si.Totalram) * int(si.Unit)
|
||
|
|
||
|
// Try determining the amount of memory inside docker container.
|
||
|
// See https://stackoverflow.com/questions/42187085/check-mem-limit-within-a-docker-container .
|
||
|
data, err := ioutil.ReadFile("/sys/fs/cgroup/memory/memory.limit_in_bytes")
|
||
|
if err != nil {
|
||
|
return totalMem
|
||
|
}
|
||
|
for len(data) > 0 && data[len(data)-1] == '\n' {
|
||
|
data = data[:len(data)-1]
|
||
|
}
|
||
|
mem, err := strconv.Atoi(string(data))
|
||
|
if err != nil {
|
||
|
return totalMem
|
||
|
}
|
||
|
if mem > totalMem {
|
||
|
mem = totalMem
|
||
|
}
|
||
|
return mem
|
||
|
}
|