diff --git a/free_memory.go b/free_memory.go new file mode 100644 index 00000000..9e5e1b35 --- /dev/null +++ b/free_memory.go @@ -0,0 +1,9 @@ +// +build !linux + +package main + +import "runtime/debug" + +func freeMemory() { + debug.FreeOSMemory() +} diff --git a/free_memory_linux.go b/free_memory_linux.go new file mode 100644 index 00000000..e3ec3957 --- /dev/null +++ b/free_memory_linux.go @@ -0,0 +1,20 @@ +// +build linux + +package main + +/* +#include +#ifdef __GLIBC__ +#include +#else +void malloc_trim(size_t pad){} +#endif +*/ +import "C" +import "runtime/debug" + +func freeMemory() { + debug.FreeOSMemory() + + C.malloc_trim(0) +} diff --git a/main.go b/main.go index 30395265..1239a9c7 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,6 @@ import ( "os" "os/signal" "runtime" - "runtime/debug" "syscall" "time" ) @@ -38,7 +37,7 @@ func main() { var logMemStats = len(os.Getenv("IMGPROXY_LOG_MEM_STATS")) > 0 for range time.Tick(time.Duration(conf.FreeMemoryInterval) * time.Second) { - debug.FreeOSMemory() + freeMemory() if logMemStats { var m runtime.MemStats