pidusage/README.md

44 lines
1.9 KiB
Markdown
Raw Permalink Normal View History

2017-04-06 10:35:15 +02:00
# pidusage
Cross-platform process cpu % and memory usage of a PID for golang
Ideas from https://github.com/soyuka/pidusage but just use Golang
2017-04-10 11:48:47 +02:00
[![Go Report Card](https://goreportcard.com/badge/github.com/struCoder/pidusage)](https://goreportcard.com/report/github.com/struCoder/pidusage)
[![GoDoc](https://godoc.org/github.com/struCoder/pidusage?status.svg)](https://godoc.org/github.com/struCoder/pidusage)
## API
```golang
import (
"os"
2017-04-10 11:48:47 +02:00
"github.com/struCoder/pidusage"
)
func printStat() {
2017-04-10 11:48:47 +02:00
sysInfo, err := pidusage.GetStat(os.Process.Pid)
}
```
## How it works
A check on the `runtime.GOOS` is done to determine the method to use.
### Linux
2017-04-10 11:48:47 +02:00
We use `/proc/{pid}/stat` in addition to the the `PAGE_SIZE` and the `CLK_TCK` direclty from `getconf()` command. Uptime comes from `proc/uptime`
Cpu usage is computed by following [those instructions](http://stackoverflow.com/questions/16726779/how-do-i-get-the-total-cpu-usage-of-an-application-from-proc-pid-stat/16736599#16736599). It keeps an history of the current processor time for the given pid so that the computed value gets more and more accurate. Don't forget to do `unmonitor(pid)` so that history gets cleared.
Cpu usage does not check the child process tree!
Memory result is representing the RSS (resident set size) only by doing `rss*pagesize`, where `pagesize` is the result of `getconf PAGE_SIZE`.
2017-04-07 17:10:33 +02:00
### On darwin, freebsd, solaris
We use a fallback with the `ps -o pcpu,rss -p PID` command to get the same informations.
Memory usage will also display the RSS only, process cpu usage might differ from a distribution to another. Please check the correspoding `man ps` for more insights on the subject.
### On AIX
AIX is tricky because I have no AIX test environement, at the moment we use: `ps -o pcpu,rssize -p PID` but `/proc` results should be more accurate! If you're familiar with the AIX environment and know how to get the same results as we've got with Linux systems.
### Windows
Next version will support