memory.go 605 B

123456789101112131415161718192021222324252627
  1. package libbox
  2. import (
  3. "math"
  4. runtimeDebug "runtime/debug"
  5. "github.com/sagernet/sing-box/common/conntrack"
  6. )
  7. var tracker *conntrack.DefaultTracker
  8. func SetMemoryLimit(enabled bool) {
  9. if tracker != nil {
  10. tracker.Close()
  11. }
  12. const memoryLimit = 45 * 1024 * 1024
  13. const memoryLimitGo = memoryLimit / 1.5
  14. if enabled {
  15. runtimeDebug.SetGCPercent(10)
  16. runtimeDebug.SetMemoryLimit(memoryLimitGo)
  17. tracker = conntrack.NewDefaultTracker(true, memoryLimit)
  18. } else {
  19. runtimeDebug.SetGCPercent(100)
  20. runtimeDebug.SetMemoryLimit(math.MaxInt64)
  21. tracker = conntrack.NewDefaultTracker(false, 0)
  22. }
  23. }