From 3a2248aa5fc5256f9c19818cc15dbd8bc3034406 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Fri, 11 May 2018 13:53:13 +0100 Subject: [PATCH] rc: add core/gc to run a garbage collection on demand --- docs/content/rc.md | 6 ++++++ fs/rc/internal.go | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/docs/content/rc.md b/docs/content/rc.md index d3ed5b63a..182a18b12 100644 --- a/docs/content/rc.md +++ b/docs/content/rc.md @@ -97,6 +97,12 @@ Eg The format of the parameter is exactly the same as passed to --bwlimit except only one bandwidth may be specified. +### core/gc: Runs a garbage collection. + +This tells the go runtime to do a garbage collection run. It isn't +necessary to call this normally, but it can be useful for debugging +memory problems. + ### core/memstats: Returns the memory statistics This returns the memory statistics of the running program. What the values mean diff --git a/fs/rc/internal.go b/fs/rc/internal.go index 307d852e1..33228d292 100644 --- a/fs/rc/internal.go +++ b/fs/rc/internal.go @@ -57,6 +57,16 @@ The most interesting values for most people are: * HeapSys: This is the amount of memory rclone has obtained from the OS * Sys: this is the total amount of memory requested from the OS * It is virtual memory so may include unused memory +`, + }) + Add(Call{ + Path: "core/gc", + Fn: rcGc, + Title: "Runs a garbage collection.", + Help: ` +This tells the go runtime to do a garbage collection run. It isn't +necessary to call this normally, but it can be useful for debugging +memory problems. `, }) } @@ -112,3 +122,10 @@ func rcMemStats(in Params) (out Params, err error) { out["OtherSys"] = m.OtherSys return out, nil } + +// Do a garbage collection run +func rcGc(in Params) (out Params, err error) { + out = make(Params) + runtime.GC() + return out, nil +}