From f1b73c9301bd35388f058dcd202358ce1c85a40b Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 2 Jun 2023 21:51:50 +0200 Subject: [PATCH] Reduce GOGC to 50 The index used by restic consumes a major part of the total memory usage. This leads to an unnecessarily large amount of memory that contains ephemeral objects that are only used for a short time. --- cmd/restic/main.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmd/restic/main.go b/cmd/restic/main.go index 392177d13..64b75b43a 100644 --- a/cmd/restic/main.go +++ b/cmd/restic/main.go @@ -7,6 +7,7 @@ import ( "log" "os" "runtime" + godebug "runtime/debug" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/options" @@ -81,7 +82,16 @@ func needsPassword(cmd string) bool { var logBuffer = bytes.NewBuffer(nil) +func tweakGoGC() { + // lower GOGC from 100 to 50, unless it was manually overwritten by the user + oldValue := godebug.SetGCPercent(50) + if oldValue != 100 { + godebug.SetGCPercent(oldValue) + } +} + func main() { + tweakGoGC() // install custom global logger into a buffer, if an error occurs // we can show the logs log.SetOutput(logBuffer)