1234567891011121314151617181920212223242526272829303132333435 |
- package conntrack
- import (
- runtimeDebug "runtime/debug"
- "time"
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/sagernet/sing/common/memory"
- )
- var (
- KillerEnabled bool
- MemoryLimit uint64
- killerLastCheck time.Time
- )
- func KillerCheck() error {
- if !KillerEnabled {
- return nil
- }
- nowTime := time.Now()
- if nowTime.Sub(killerLastCheck) < 3*time.Second {
- return nil
- }
- killerLastCheck = nowTime
- if memory.Total() > MemoryLimit {
- Close()
- go func() {
- time.Sleep(time.Second)
- runtimeDebug.FreeOSMemory()
- }()
- return E.New("out of memory")
- }
- return nil
- }
|