mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
38 lines
976 B
Go
38 lines
976 B
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/KimMachineGun/automemlimit/memlimit"
|
|
)
|
|
|
|
// InitAutoMemLimit configures Go's memory limit using automemlimit based on the
|
|
// provided config. It is exported so that downstream consumers can call it.
|
|
func InitAutoMemLimit(config *Config) {
|
|
if !config.Memory.AutoMemLimitEnabled {
|
|
return
|
|
}
|
|
|
|
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo}))
|
|
|
|
limit, err := memlimit.SetGoMemLimitWithOpts(
|
|
memlimit.WithRatio(config.Memory.AutoMemLimitRatio),
|
|
memlimit.WithProvider(
|
|
memlimit.ApplyFallback(
|
|
memlimit.FromCgroup,
|
|
memlimit.FromSystem,
|
|
),
|
|
),
|
|
memlimit.WithRefreshInterval(15*time.Second),
|
|
memlimit.WithLogger(logger),
|
|
)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "warning: failed to set GOMEMLIMIT: %v\n", err)
|
|
return
|
|
}
|
|
fmt.Fprintf(os.Stderr, "info: GOMEMLIMIT set to %d bytes (ratio: %.2f)\n", limit, config.Memory.AutoMemLimitRatio)
|
|
}
|