| 12345678910111213141516171819202122232425262728293031323334 |
- package sys
- import (
- "os"
- "sync"
- "github.com/shirou/gopsutil/v4/process"
- )
- var (
- selfProc *process.Process
- selfProcOnce sync.Once
- )
- // SelfRSS returns the resident set size of the current process in bytes — the
- // real physical memory the OS attributes to the panel. Unlike
- // runtime.MemStats.Sys (a never-shrinking high-water mark of reserved address
- // space that also counts memory already returned to the OS), RSS reflects current
- // usage and drops as memory is released. Returns 0 when unavailable.
- func SelfRSS() uint64 {
- selfProcOnce.Do(func() {
- if p, err := process.NewProcess(int32(os.Getpid())); err == nil {
- selfProc = p
- }
- })
- if selfProc == nil {
- return 0
- }
- if mi, err := selfProc.MemoryInfo(); err == nil && mi != nil {
- return mi.RSS
- }
- return 0
- }
|