From ea50f0b1b01fc1a95addacd1f6e77e0c0636453f Mon Sep 17 00:00:00 2001 From: Gary Rong Date: Wed, 15 Jul 2026 14:40:33 +0800 Subject: [PATCH] cmd: add gogc flag --- cmd/geth/main.go | 1 + cmd/utils/flags.go | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index b5802f51e7..d1ccc07e5a 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -102,6 +102,7 @@ var ( utils.CacheLogSizeFlag, utils.FDLimitFlag, utils.MemoryLimitFlag, + utils.GOGCFlag, utils.CryptoKZGFlag, utils.ListenPortFlag, utils.DiscoveryPortFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 8b06772d87..844cc99834 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -559,6 +559,12 @@ var ( Usage: "Soft memory limit for the Go runtime in megabytes (default = no limit)", Category: flags.PerfCategory, } + GOGCFlag = &cli.IntFlag{ + Name: "gogc", + Usage: "Go garbage collection target percentage (default = 100, negative disables)", + Value: 100, + Category: flags.PerfCategory, + } CryptoKZGFlag = &cli.StringFlag{ Name: "crypto.kzg", Usage: "KZG library implementation to use; gokzg (recommended) or ckzg", @@ -1768,10 +1774,19 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { } } - godebug.SetGCPercent(100) + // Setting go runtime settings + if ctx.IsSet(GOGCFlag.Name) { + gcPercent := ctx.Int(GOGCFlag.Name) + log.Info("Sanitizing Go's GC trigger", "percent", gcPercent) + godebug.SetGCPercent(gcPercent) + } if ctx.IsSet(MemoryLimitFlag.Name) { memLimit := int64(ctx.Int(MemoryLimitFlag.Name)) * 1024 * 1024 - log.Debug("Setting Go memory limit", "MB", memLimit/1024/1024) + if memLimit > int64(total) { + log.Info("Sanitizing memory limit", "provided(MB)", memLimit/1024/1024, "updated(MB)", total/1024/1024) + memLimit = int64(total) + } + log.Info("Setting Go memory limit", "MB", memLimit/1024/1024) godebug.SetMemoryLimit(memLimit) }