forked from TrueCloudLab/restic
Merge pull request #4353 from MichaelEischer/tune-gc
Tune Go garbage collector
This commit is contained in:
commit
191c47d30e
4 changed files with 23 additions and 0 deletions
5
changelog/unreleased/issue-3328
Normal file
5
changelog/unreleased/issue-3328
Normal file
|
@ -0,0 +1,5 @@
|
|||
Enhancement: Reduce memory usage by up to 25%
|
||||
|
||||
https://github.com/restic/restic/issues/3328
|
||||
https://github.com/restic/restic/pull/4352
|
||||
https://github.com/restic/restic/pull/4353
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"context"
|
||||
"math"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -205,6 +206,9 @@ func runPruneWithRepo(ctx context.Context, opts PruneOptions, gopts GlobalOption
|
|||
return err
|
||||
}
|
||||
|
||||
// Trigger GC to reset garbage collection threshold
|
||||
runtime.GC()
|
||||
|
||||
return doPrune(ctx, opts, gopts, repo, plan)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"runtime"
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
|
@ -601,6 +602,9 @@ func (r *Repository) LoadIndex(ctx context.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Trigger GC to reset garbage collection threshold
|
||||
runtime.GC()
|
||||
|
||||
if r.cfg.Version < 2 {
|
||||
// sanity check
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
|
|
Loading…
Reference in a new issue