2017-02-01 18:26:00 +00:00
|
|
|
package mem
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
"github.com/shirou/gopsutil/internal/common"
|
|
|
|
)
|
|
|
|
|
2018-10-19 18:33:23 +00:00
|
|
|
var invoke common.Invoker = common.Invoke{}
|
2017-02-01 18:26:00 +00:00
|
|
|
|
|
|
|
// Memory usage statistics. Total, Available and Used contain numbers of bytes
|
|
|
|
// for human consumption.
|
|
|
|
//
|
|
|
|
// The other fields in this struct contain kernel specific values.
|
|
|
|
type VirtualMemoryStat struct {
|
|
|
|
// Total amount of RAM on this system
|
|
|
|
Total uint64 `json:"total"`
|
|
|
|
|
|
|
|
// RAM available for programs to allocate
|
|
|
|
//
|
|
|
|
// This value is computed from the kernel specific values.
|
|
|
|
Available uint64 `json:"available"`
|
|
|
|
|
|
|
|
// RAM used by programs
|
|
|
|
//
|
|
|
|
// This value is computed from the kernel specific values.
|
|
|
|
Used uint64 `json:"used"`
|
|
|
|
|
|
|
|
// Percentage of RAM used by programs
|
|
|
|
//
|
|
|
|
// This value is computed from the kernel specific values.
|
|
|
|
UsedPercent float64 `json:"usedPercent"`
|
|
|
|
|
|
|
|
// This is the kernel's notion of free memory; RAM chips whose bits nobody
|
|
|
|
// cares about the value of right now. For a human consumable number,
|
|
|
|
// Available is what you really want.
|
|
|
|
Free uint64 `json:"free"`
|
|
|
|
|
|
|
|
// OS X / BSD specific numbers:
|
|
|
|
// http://www.macyourself.com/2010/02/17/what-is-free-wired-active-and-inactive-system-memory-ram/
|
|
|
|
Active uint64 `json:"active"`
|
|
|
|
Inactive uint64 `json:"inactive"`
|
|
|
|
Wired uint64 `json:"wired"`
|
|
|
|
|
2018-10-19 18:33:23 +00:00
|
|
|
// FreeBSD specific numbers:
|
|
|
|
// https://reviews.freebsd.org/D8467
|
2020-07-01 12:47:56 +00:00
|
|
|
Laundry uint64 `json:"laundry"`
|
2018-10-19 18:33:23 +00:00
|
|
|
|
2017-02-01 18:26:00 +00:00
|
|
|
// Linux specific numbers
|
|
|
|
// https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html
|
|
|
|
// https://www.kernel.org/doc/Documentation/filesystems/proc.txt
|
2018-10-19 18:33:23 +00:00
|
|
|
// https://www.kernel.org/doc/Documentation/vm/overcommit-accounting
|
|
|
|
Buffers uint64 `json:"buffers"`
|
|
|
|
Cached uint64 `json:"cached"`
|
|
|
|
Writeback uint64 `json:"writeback"`
|
|
|
|
Dirty uint64 `json:"dirty"`
|
|
|
|
WritebackTmp uint64 `json:"writebacktmp"`
|
|
|
|
Shared uint64 `json:"shared"`
|
|
|
|
Slab uint64 `json:"slab"`
|
2020-07-01 12:47:56 +00:00
|
|
|
SReclaimable uint64 `json:"sreclaimable"`
|
|
|
|
SUnreclaim uint64 `json:"sunreclaim"`
|
2018-10-19 18:33:23 +00:00
|
|
|
PageTables uint64 `json:"pagetables"`
|
|
|
|
SwapCached uint64 `json:"swapcached"`
|
|
|
|
CommitLimit uint64 `json:"commitlimit"`
|
|
|
|
CommittedAS uint64 `json:"committedas"`
|
|
|
|
HighTotal uint64 `json:"hightotal"`
|
|
|
|
HighFree uint64 `json:"highfree"`
|
|
|
|
LowTotal uint64 `json:"lowtotal"`
|
|
|
|
LowFree uint64 `json:"lowfree"`
|
|
|
|
SwapTotal uint64 `json:"swaptotal"`
|
|
|
|
SwapFree uint64 `json:"swapfree"`
|
|
|
|
Mapped uint64 `json:"mapped"`
|
|
|
|
VMallocTotal uint64 `json:"vmalloctotal"`
|
|
|
|
VMallocUsed uint64 `json:"vmallocused"`
|
|
|
|
VMallocChunk uint64 `json:"vmallocchunk"`
|
|
|
|
HugePagesTotal uint64 `json:"hugepagestotal"`
|
|
|
|
HugePagesFree uint64 `json:"hugepagesfree"`
|
|
|
|
HugePageSize uint64 `json:"hugepagesize"`
|
2017-02-01 18:26:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type SwapMemoryStat struct {
|
|
|
|
Total uint64 `json:"total"`
|
|
|
|
Used uint64 `json:"used"`
|
|
|
|
Free uint64 `json:"free"`
|
|
|
|
UsedPercent float64 `json:"usedPercent"`
|
|
|
|
Sin uint64 `json:"sin"`
|
|
|
|
Sout uint64 `json:"sout"`
|
2020-07-01 12:47:56 +00:00
|
|
|
PgIn uint64 `json:"pgin"`
|
|
|
|
PgOut uint64 `json:"pgout"`
|
|
|
|
PgFault uint64 `json:"pgfault"`
|
2020-10-07 16:57:18 +00:00
|
|
|
|
|
|
|
// Linux specific numbers
|
|
|
|
// https://www.kernel.org/doc/Documentation/cgroup-v2.txt
|
|
|
|
PgMajFault uint64 `json:"pgmajfault"`
|
2017-02-01 18:26:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (m VirtualMemoryStat) String() string {
|
|
|
|
s, _ := json.Marshal(m)
|
|
|
|
return string(s)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m SwapMemoryStat) String() string {
|
|
|
|
s, _ := json.Marshal(m)
|
|
|
|
return string(s)
|
|
|
|
}
|