Documentation
¶
Overview ¶
Package procfs provides functions to retrieve system, kernel and process metrics from the pseudo-filesystem proc.
Example:
package main import ( "fmt" "log" "github.com/acksin/procfs" ) func main() { p, err := procfs.Self() if err != nil { log.Fatalf("could not get process: %s", err) } stat, err := p.NewStat() if err != nil { log.Fatalf("could not get process stat: %s", err) } fmt.Printf("command: %s\n", stat.Comm) fmt.Printf("cpu time: %fs\n", stat.CPUTime()) fmt.Printf("vsize: %dB\n", stat.VirtualMemory()) fmt.Printf("rss: %dB\n", stat.ResidentMemory()) }
Index ¶
- Constants
- type DiskstatLine
- type Diskstats
- type FDs
- type FS
- func (fs FS) AllProcs() (Procs, error)
- func (fs FS) NewDiskstats() (m Diskstats, err error)
- func (fs FS) NewIPVSBackendStatus() ([]IPVSBackendStatus, error)
- func (fs FS) NewIPVSStats() (IPVSStats, error)
- func (fs FS) NewMeminfo() (m Meminfo, err error)
- func (fs FS) NewNetSockstat() (m NetSockstat, err error)
- func (fs FS) NewNetTCP() (m NetTCP, err error)
- func (fs FS) NewProc(pid int) (Proc, error)
- func (fs FS) NewStat() (Stat, error)
- func (fs FS) NewSys() (m Sys, err error)
- func (fs FS) ParseMDStat() (mdstates []MDStat, err error)
- func (fs FS) Path(p ...string) string
- func (fs FS) Self() (Proc, error)
- type IPVSBackendStatus
- type IPVSStats
- type MDStat
- type Meminfo
- type NetSockstat
- type NetTCP
- type NetTCPLine
- type Proc
- func (p Proc) CmdLine() ([]string, error)
- func (p Proc) Comm() (string, error)
- func (p Proc) Executable() (string, error)
- func (p Proc) FileDescriptorTargets() ([]string, error)
- func (p Proc) FileDescriptors() ([]uintptr, error)
- func (p Proc) FileDescriptorsLen() (int, error)
- func (p Proc) NewFD() (FDs, error)
- func (p Proc) NewIO() (ProcIO, error)
- func (p Proc) NewLimits() (ProcLimits, error)
- func (p Proc) NewStat() (ProcStat, error)
- func (p Proc) NewStatus() (ps ProcStatus, err error)
- type ProcIO
- type ProcLimits
- type ProcStat
- type ProcStatus
- type Procs
- type Stat
- type Sys
Constants ¶
const DefaultMountPoint = "/proc"
DefaultMountPoint is the common mount point of the proc filesystem.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DiskstatLine ¶
type DiskstatLine struct { // 1 - major number MajorVersion int64 // 2 - minor mumber MinorNumber int64 // 3 - device name DeviceName int64 // 4 - reads completed successfully ReadsCompleted int64 // 5 - reads merged ReadsMerged int64 // 6 - sectors read SectorsRead int64 // 7 - time spent reading (ms) TimeSpentReading int64 // 8 - writes completed WritesCompleted int64 // 9 - writes merged WritesMerged int64 // 10 - sectors written SectorsWritten int64 // 11 - time spent writing (ms) TimeSpentWriting int64 // 12 - I/Os currently in progress IOInProgress int64 // 13 - time spent doing I/Os (ms) TimeDoingIO int64 // 14 - weighted time spent doing I/Os (ms) WeightedTimeDoingIO int64 }
type FS ¶
type FS string
FS represents the pseudo-filesystem proc, which provides an interface to kernel data structures.
func NewFS ¶
NewFS returns a new FS mounted under the given mountPoint. It will error if the mount point can't be read.
func (FS) NewDiskstats ¶
NewDiskstats returns an information about current kernel/system statistics.
func (FS) NewIPVSBackendStatus ¶
func (fs FS) NewIPVSBackendStatus() ([]IPVSBackendStatus, error)
NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs from the specified `proc` filesystem.
func (FS) NewIPVSStats ¶
NewIPVSStats reads the IPVS statistics from the specified `proc` filesystem.
func (FS) NewMeminfo ¶
NewMeminfo returns an information about current kernel/system statistics.
func (FS) NewNetSockstat ¶
func (fs FS) NewNetSockstat() (m NetSockstat, err error)
NewNetSockstat returns an information about current kernel/system statistics.
func (FS) ParseMDStat ¶
ParseMDStat parses an mdstat-file and returns a struct with the relevant infos.
type IPVSBackendStatus ¶
type IPVSBackendStatus struct { // The local (virtual) IP address. LocalAddress net.IP // The local (virtual) port. LocalPort uint16 // The transport protocol (TCP, UDP). Proto string // The remote (real) IP address. RemoteAddress net.IP // The remote (real) port. RemotePort uint16 // The current number of active connections for this virtual/real address pair. ActiveConn uint64 // The current number of inactive connections for this virtual/real address pair. InactConn uint64 // The current weight of this virtual/real address pair. Weight uint64 }
IPVSBackendStatus holds current metrics of one virtual / real address pair.
func NewIPVSBackendStatus ¶
func NewIPVSBackendStatus() ([]IPVSBackendStatus, error)
NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs.
type IPVSStats ¶
type IPVSStats struct { // Total count of connections. Connections uint64 // Total incoming packages processed. IncomingPackets uint64 // Total outgoing packages processed. OutgoingPackets uint64 // Total incoming traffic. IncomingBytes uint64 // Total outgoing traffic. OutgoingBytes uint64 }
IPVSStats holds IPVS statistics, as exposed by the kernel in `/proc/net/ip_vs_stats`.
type MDStat ¶
type MDStat struct { // Name of the device. Name string // activity-state of the device. ActivityState string // Number of active disks. DisksActive int64 // Total number of disks the device consists of. DisksTotal int64 // Number of blocks the device holds. BlocksTotal int64 // Number of blocks on the device that are in sync. BlocksSynced int64 }
MDStat holds info parsed from /proc/mdstat.
type Meminfo ¶
type Meminfo struct { // Total usable ram (i.e. physical ram minus a few reserved // bits and the kernel binary code) MemTotal int64 `meminfo:"MemTotal"` // The sum of LowFree+HighFree MemFree int64 `meminfo:"MemFree"` // An estimate of how much memory is available for starting // new applications, without swapping. Calculated from // MemFree, SReclaimable, the size of the file LRU lists, and // the low watermarks in each zone. The estimate takes into // account that the system needs some page cache to function // well, and that not all reclaimable slab will be // reclaimable, due to items being in use. The impact of those // factors will vary from system to system. MemAvailable int64 `meminfo:"MemAvailable"` // Relatively temporary storage for raw disk blocks shouldn't // get tremendously large (20MB or so) Buffers int64 `meminfo:"Buffers"` Cached int64 `meminfo:"Cached"` // SwapCached is the current amount of swap space used as a // cache. SwapCached int64 `meminfo:"SwapCached"` // Memory that has been used more recently and usually not // reclaimed unless absolutely necessary. Active int64 `meminfo:"Active"` // Memory which has been less recently used. It is more // eligible to be reclaimed for other purposes Inactive int64 `meminfo:"Inactive"` ActiveAnon int64 `meminfo:"Active(anon)"` InactiveAnon int64 `meminfo:"Inactive(anon)"` ActiveFile int64 `meminfo:"Active(file)"` InactiveFile int64 `meminfo:"Inactive(file)"` Unevictable int64 `meminfo:"Unevictable"` Mlocked int64 `meminfo:"Mlocked"` // total amount of swap space available SwapTotal int64 `meminfo:"SwapTotal"` // SwapFree is the total amount of swap space free. SwapFree int64 `meminfo:"SwapFree"` // Memory which is waiting to get written back to the disk Dirty int64 `meminfo:"Dirty"` // Memory which is actively being written back to the disk Writeback int64 `meminfo:"Writeback"` // Non-file backed pages mapped into userspace page tables AnonPages int64 `meminfo:"AnonPages"` // files which have been mmaped, such as libraries Mapped int64 `meminfo:"Mapped"` Shmem int64 `meminfo:"Shmem"` // in-kernel data structures cache Slab int64 `meminfo:"Slab"` // Part of Slab, that might be reclaimed, such as caches SReclaimable int64 `meminfo:"SReclaimable"` // Part of Slab, that cannot be reclaimed on memory pressure SUnreclaim int64 `meminfo:"SUnreclaim"` KernelStack int64 `meminfo:"KernelStack"` // amount of memory dedicated to the lowest level of page // tables. PageTables int64 `meminfo:"PageTables"` // NFS pages sent to the server, but not yet committed to // stable storage NFSUnstable int64 `meminfo:"NFS_Unstable"` // Memory used for block device "bounce buffers" Bounce int64 `meminfo:"Bounce"` // Memory used by FUSE for temporary writeback buffers WritebackTmp int64 `meminfo:"WritebackTmp"` // Based on the overcommit ratio ('vm.overcommit_ratio'), // this is the total amount of memory currently available to // be allocated on the system. This limit is only adhered to // if strict overcommit accounting is enabled (mode 2 in // 'vm.overcommit_memory'). // The CommitLimit is calculated with the following formula: // CommitLimit = ([total RAM pages] - [total huge TLB pages]) * // overcommit_ratio / 100 + [total swap pages] // For example, on a system with 1G of physical RAM and 7G // of swap with a `vm.overcommit_ratio` of 30 it would // yield a CommitLimit of 7.3G. // For more details, see the memory overcommit documentation // in vm/overcommit-accounting. CommitLimit int64 `meminfo:"CommitLimit"` // The amount of memory presently allocated on the system. // The committed memory is a sum of all of the memory which // has been allocated by processes, even if it has not been // "used" by them as of yet. A process which malloc()'s 1G // of memory, but only touches 300M of it will show up as // using 1G. This 1G is memory which has been "committed" to // by the VM and can be used at any time by the allocating // application. With strict overcommit enabled on the system // (mode 2 in 'vm.overcommit_memory'),allocations which would // exceed the CommitLimit (detailed above) will not be permitted. // This is useful if one needs to guarantee that processes will // not fail due to lack of memory once that memory has been // successfully allocated. CommittedAS int64 `meminfo:"Committed_AS"` // total size of vmalloc memory area VMallocTotal int64 `meminfo:"VmallocTotal"` // amount of vmalloc area which is used VMallocUsed int64 `meminfo:"VmallocUsed"` // largest contiguous block of vmalloc area which is free VMallocChunk int64 `meminfo:"VmallocChunk"` HardwareCorrupted int64 `meminfo:"HardwareCorrupted"` AnonHugePages int64 `meminfo:"AnonHugePages"` HugePagesTotal int64 `meminfo:"HugePages_Total"` HugePagesFree int64 `meminfo:"HugePages_Free"` HugePagesRsvd int64 `meminfo:"HugePages_Rsvd"` HugePagesSurp int64 `meminfo:"HugePages_Surp"` Hugepagesize int64 `meminfo:"Hugepagesize"` DirectMap4k int64 `meminfo:"DirectMap4k"` DirectMap2M int64 `meminfo:"DirectMap2M"` }
Meminfo represents memory statistics.
func NewMeminfo ¶
NewMeminfo returns kernel/system statistics read from /proc/stat.
type NetSockstat ¶
type NetSockstat struct { Sockets struct { Used int64 } TCP struct { InUse int64 Orphan int64 Tw int64 Alloc int64 Mem int64 } UDP struct { InUse int64 Mem int64 } UDPLite struct { InUse int64 } RAW struct { InUse int64 } FRAG struct { InUse int64 Memory int64 } }
NetSockstat stats on /proc/net/sockstat
func NewNetSockstat ¶
func NewNetSockstat() (NetSockstat, error)
NewNetSockstat returns kernel/system statistics read from /proc/net/sockstat.
type NetTCPLine ¶
type NetTCPLine struct { Sl string `net_tcp:"sl"` LocalAddress string `net_tcp:"local_address"` RemoteAddress string `net_tcp:"rem_address"` St string `net_tcp:"st"` TxQueue string `net_tcp:"tx_queue"` RxQueue string `net_tcp:"rx_queue"` Tr string `net_tcp:"tr"` TmWhen string `net_tcp:"tm->when"` Retrnsmt string `net_tcp:"retrnsmt"` UID string `net_tcp:"uid"` Timeout string `net_tcp:"timeout"` Inode string `net_tcp:"inode"` RefCount string `net_tcp:""` MemoryAddress string `net_tcp:""` }
NetTCPLine is a parsed line of /proc/net/tcp
type Proc ¶
type Proc struct { // The process ID. PID int // contains filtered or unexported fields }
Proc provides information about a running process.
func (Proc) Executable ¶
Executable returns the absolute path of the executable command of a process.
func (Proc) FileDescriptorTargets ¶
FileDescriptorTargets returns the targets of all file descriptors of a process. If a file descriptor is not a symlink to a file (like a socket), that value will be the empty string.
func (Proc) FileDescriptors ¶
FileDescriptors returns the currently open file descriptors of a process.
func (Proc) FileDescriptorsLen ¶
FileDescriptorsLen returns the number of currently open file descriptors of a process.
func (Proc) NewLimits ¶
func (p Proc) NewLimits() (ProcLimits, error)
NewLimits returns the current soft limits of the process.
func (Proc) NewStatus ¶
func (p Proc) NewStatus() (ps ProcStatus, err error)
NewStatus returns the current status information of the process.
type ProcIO ¶
type ProcIO struct { // Chars read. RChar uint64 // Chars written. WChar uint64 // Read syscalls. SyscR uint64 // Write syscalls. SyscW uint64 // Bytes read. ReadBytes uint64 // Bytes written. WriteBytes uint64 // Bytes written, but taking into account truncation. See // Documentation/filesystems/proc.txt in the kernel sources for // detailed explanation. CancelledWriteBytes int64 }
ProcIO models the content of /proc/<pid>/io.
type ProcLimits ¶
type ProcLimits struct { // CPU time limit in seconds. CPUTime int // Maximum size of files that the process may create. FileSize int // Maximum size of the process's data segment (initialized data, // uninitialized data, and heap). DataSize int // Maximum size of the process stack in bytes. StackSize int // Maximum size of a core file. CoreFileSize int // Limit of the process's resident set in pages. ResidentSet int // Maximum number of processes that can be created for the real user ID of // the calling process. Processes int // Value one greater than the maximum file descriptor number that can be // opened by this process. OpenFiles int // Maximum number of bytes of memory that may be locked into RAM. LockedMemory int // Maximum size of the process's virtual memory address space in bytes. AddressSpace int // Limit on the combined number of flock(2) locks and fcntl(2) leases that // this process may establish. FileLocks int // Limit of signals that may be queued for the real user ID of the calling // process. PendingSignals int // Limit on the number of bytes that can be allocated for POSIX message // queues for the real user ID of the calling process. MsqqueueSize int // Limit of the nice priority set using setpriority(2) or nice(2). NicePriority int // Limit of the real-time priority set using sched_setscheduler(2) or // sched_setparam(2). RealtimePriority int // Limit (in microseconds) on the amount of CPU time that a process // scheduled under a real-time scheduling policy may consume without making // a blocking system call. RealtimeTimeout int }
ProcLimits represents the soft limits for each of the process's resource limits. For more information see getrlimit(2): http://man7.org/linux/man-pages/man2/getrlimit.2.html.
type ProcStat ¶
type ProcStat struct { // The process ID. PID int // The filename of the executable. Comm string // The process state. State string // The PID of the parent of this process. PPID int // The process group ID of the process. PGRP int // The session ID of the process. Session int // The controlling terminal of the process. TTY int // The ID of the foreground process group of the controlling terminal of // the process. TPGID int // The kernel flags word of the process. Flags uint // The number of minor faults the process has made which have not required // loading a memory page from disk. MinFlt uint // The number of minor faults that the process's waited-for children have // made. CMinFlt uint // The number of major faults the process has made which have required // loading a memory page from disk. MajFlt uint // The number of major faults that the process's waited-for children have // made. CMajFlt uint // Amount of time that this process has been scheduled in user mode, // measured in clock ticks. UTime uint // Amount of time that this process has been scheduled in kernel mode, // measured in clock ticks. STime uint // Amount of time that this process's waited-for children have been // scheduled in user mode, measured in clock ticks. CUTime uint // Amount of time that this process's waited-for children have been // scheduled in kernel mode, measured in clock ticks. CSTime uint // For processes running a real-time scheduling policy, this is the negated // scheduling priority, minus one. Priority int // The nice value, a value in the range 19 (low priority) to -20 (high // priority). Nice int // Number of threads in this process. NumThreads int // The time the process started after system boot, the value is expressed // in clock ticks. Starttime uint64 // Virtual memory size in bytes. VSize int // Resident set size in pages. RSS int // contains filtered or unexported fields }
ProcStat provides status information about the process, read from /proc/[pid]/stat.
func (ProcStat) ResidentMemory ¶
ResidentMemory returns the resident memory size in bytes.
func (ProcStat) VirtualMemory ¶
VirtualMemory returns the virtual memory size in bytes.
type ProcStatus ¶
type ProcStatus struct { Name string `proc_status:"Name"` State string `proc_status:"State"` Tgid string `proc_status:"Tgid"` Ngid string `proc_status:"Ngid"` Pid string `proc_status:"Pid"` PPid string `proc_status:"PPid"` TracerPid string `proc_status:"TracerPid"` UID string `proc_status:"Uid"` GID string `proc_status:"Gid"` FDSize string `proc_status:"FDSize"` Groups string `proc_status:"Groups"` VMPeak string `proc_status:"VmPeak"` VMSize string `proc_status:"VmSize"` VMLck string `proc_status:"VmLck"` VMPin string `proc_status:"VmPin"` VMHWM string `proc_status:"VmHWM"` VMRSS string `proc_status:"VmRSS"` VMData string `proc_status:"VmData"` VMStk string `proc_status:"VmStk"` VMExe string `proc_status:"VmExe"` VMLib string `proc_status:"VmLib"` VMPTE string `proc_status:"VmPTE"` VMSwap string `proc_status:"VmSwap"` Threads string `proc_status:"Threads"` SigQ string `proc_status:"SigQ"` SigPnd string `proc_status:"SigPnd"` ShdPnd string `proc_status:"ShdPnd"` SigBlk string `proc_status:"SigBlk"` SigIgn string `proc_status:"SigIgn"` SigCgt string `proc_status:"SigCgt"` CapInh string `proc_status:"CapInh"` CapPrm string `proc_status:"CapPrm"` CapEff string `proc_status:"CapEff"` CapBnd string `proc_status:"CapBnd"` Seccomp string `proc_status:"Seccomp"` CpusAllowed string `proc_status:"Cpus_allowed"` CpusAllowedList string `proc_status:"Cpus_allowed_list"` MemsAllowed string `proc_status:"Mems_allowed"` MemsAllowedList string `proc_status:"Mems_allowed_list"` VoluntaryCtxtSwitches string `proc_status:"voluntary_ctxt_switches"` NonvoluntaryCtxtSwitches string `proc_status:"nonvoluntary_ctxt_switches"` // contains filtered or unexported fields }
type Procs ¶
type Procs []Proc
Procs represents a list of Proc structs.