Automatically set GOMEMLIMIT based on the Linux cgroups(7) memory limit.
See more details about GOMEMLIMIT here.
Version v1.0.0 simplifies the public API and improves cgroup memory limit detection.
Key changes from v0.x:
memlimit.Setreplaces thememlimit.SetGoMemLimit*functionsmemlimit.Setreturns the previousGOMEMLIMITinstead of0when configuration is skipped or an error occursmemlimit.SetsetsGOMEMLIMITtomath.MaxInt64when the provider returnsmemlimit.ErrNoLimitmemlimit.FromCgroupreplaces the version-specific cgroup providersmemlimit.WithEnv,AUTOMEMLIMIT_EXPERIMENT, andAUTOMEMLIMIT_DEBUGwere removed- Use
memlimit.FromSystemfor system memory fallback
- Use
memlimit.WithRefreshIntervalnow takes acontext.Contextfor cancellationmemlimit.WithMinwas added to set a lower bound forGOMEMLIMIT
go get github.com/KimMachineGun/automemlimit@latestpackage main
// Importing this package sets GOMEMLIMIT automatically from the cgroup memory limit.
// By default, it sets GOMEMLIMIT to 90% of the cgroup memory limit.
// Set the AUTOMEMLIMIT environment variable to a ratio in (0.0, 1.0], or "off".
import _ "github.com/KimMachineGun/automemlimit"For more control, use memlimit.Set directly:
package main
import (
"log"
"github.com/KimMachineGun/automemlimit/memlimit"
)
func main() {
_, err := memlimit.Set(
memlimit.WithRatio(0.9),
memlimit.WithMin(100*1024*1024),
memlimit.WithProvider(
memlimit.ApplyFallback(
memlimit.FromCgroup,
memlimit.FromSystem,
),
),
)
if err != nil {
log.Fatal(err)
}
}