diff --git a/scripts-new/define/binaries.sh b/scripts-new/define/binaries.sh index 54f8912e0..fdd1041f2 100644 --- a/scripts-new/define/binaries.sh +++ b/scripts-new/define/binaries.sh @@ -8,4 +8,4 @@ declare -A binaries=( ) -tool_binaries=("ncpu" "infra") +tool_binaries=("ncpu" "infra" "check-free-memory") diff --git a/tools/check-free-memory/main.go b/tools/check-free-memory/main.go new file mode 100644 index 000000000..b763ff4fa --- /dev/null +++ b/tools/check-free-memory/main.go @@ -0,0 +1,27 @@ +package main + +import ( + "fmt" + "os" + "syscall" +) + +func main() { + var sysInfo syscall.Sysinfo_t + + err := syscall.Sysinfo(&sysInfo) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to get system info: %v\n", err) + os.Exit(-1) + } + + // Sysinfo returns memory in bytes, convert it to gigabytes + freeMemoryGB := float64(sysInfo.Freeram) / float64(1024*1024*1024) + + if freeMemoryGB < 4.0 { + fmt.Fprintf(os.Stderr, "System free memory is less than 4GB: %.2fGB\n", freeMemoryGB) + os.Exit(-1) + } else { + fmt.Printf("System free memory is sufficient: %.2fGB\n", freeMemoryGB) + } +}