1
0
mirror of https://github.com/google/gops.git synced 2024-11-24 08:22:25 +02:00
gops/README.md

141 lines
3.4 KiB
Markdown
Raw Normal View History

2016-11-14 10:08:24 +02:00
# gops [![Build Status](https://travis-ci.org/google/gops.svg?branch=master)](https://travis-ci.org/google/gops) [![GoDoc](https://godoc.org/github.com/google/gops/agent?status.svg)](https://godoc.org/github.com/google/gops/agent)
2016-11-06 08:49:51 +02:00
2016-11-06 08:57:18 +02:00
gops is a command to list and diagnose Go processes currently running on your system.
2016-11-06 08:49:51 +02:00
```
$ gops
2016-11-06 08:50:39 +02:00
983 uplink-soecks (/usr/local/bin/uplink-soecks)
52697 gops (/Users/jbd/bin/gops)
4132* foops (/Users/jbd/bin/foops)
2016-11-06 08:50:39 +02:00
51130 gocode (/Users/jbd/bin/gocode)
2016-11-06 08:49:51 +02:00
```
## Installation
```
$ go get -u github.com/google/gops
```
2016-11-06 08:57:18 +02:00
## Diagnostics
2016-11-14 08:29:02 +02:00
For processes that starts the diagnostics agent, gops can report
2016-11-06 08:57:18 +02:00
additional information such as the current stack trace, Go version, memory
stats, etc.
2016-11-11 21:50:47 +02:00
In order to start the diagnostics agent, see the [hello example](https://github.com/google/gops/blob/master/examples/hello/main.go).
2016-11-14 08:29:02 +02:00
``` go
package main
import (
"log"
"time"
"github.com/google/gops/agent"
)
func main() {
2016-12-20 22:27:39 +02:00
if err := agent.Listen(nil); err != nil {
2016-11-14 08:29:02 +02:00
log.Fatal(err)
}
time.Sleep(time.Hour)
}
```
2017-01-20 23:19:03 +02:00
### Manual
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
#### Listing all processes
To print all go processes, run `gops` without arguments:
2017-01-02 05:54:15 +02:00
```sh
$ gops
983 uplink-soecks (/usr/local/bin/uplink-soecks)
52697 gops (/Users/jbd/bin/gops)
4132* foops (/Users/jbd/bin/foops)
51130 gocode (/Users/jbd/bin/gocode)
```
Note that processes running the agent are marked with `*` next to the PID (e.g. `4132*`).
2016-11-06 08:57:18 +02:00
2017-01-20 23:19:03 +02:00
#### $ gops stack \<pid\>
2016-11-06 08:57:18 +02:00
2016-11-14 08:29:02 +02:00
In order to print the current stack trace from a target program, run the following command:
2017-01-20 23:19:03 +02:00
2016-11-14 08:29:02 +02:00
```sh
2017-01-02 05:54:15 +02:00
$ gops stack <pid>
2017-01-20 23:19:03 +02:00
gops stack 85709
goroutine 8 [running]:
runtime/pprof.writeGoroutineStacks(0x13c7bc0, 0xc42000e008, 0xc420ec8520, 0xc420ec8520)
/Users/jbd/go/src/runtime/pprof/pprof.go:603 +0x79
runtime/pprof.writeGoroutine(0x13c7bc0, 0xc42000e008, 0x2, 0xc428f1c048, 0xc420ec8608)
/Users/jbd/go/src/runtime/pprof/pprof.go:592 +0x44
runtime/pprof.(*Profile).WriteTo(0x13eeda0, 0x13c7bc0, 0xc42000e008, 0x2, 0xc42000e008, 0x0)
/Users/jbd/go/src/runtime/pprof/pprof.go:302 +0x3b5
github.com/google/gops/agent.handle(0x13cd560, 0xc42000e008, 0xc420186000, 0x1, 0x1, 0x0, 0x0)
/Users/jbd/src/github.com/google/gops/agent/agent.go:150 +0x1b3
github.com/google/gops/agent.listen()
/Users/jbd/src/github.com/google/gops/agent/agent.go:113 +0x2b2
created by github.com/google/gops/agent.Listen
/Users/jbd/src/github.com/google/gops/agent/agent.go:94 +0x480
# ...
2016-11-06 08:57:18 +02:00
```
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
#### $ gops memstats \<pid\>
2016-11-14 08:29:02 +02:00
To print the current memory stats, run the following command:
```sh
2017-01-02 05:54:15 +02:00
$ gops memstats <pid>
2016-11-06 08:57:18 +02:00
```
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
#### $ gops gc \<pid\>
2016-11-06 08:57:18 +02:00
2017-01-20 23:19:03 +02:00
If you want to force run garbage collection on the target program, run `gc`.
It will block until the GC is completed.
2016-11-06 08:57:18 +02:00
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
#### $ gops version \<pid\>
gops reports the Go version the target program is built with, if you run the following:
2016-11-14 08:29:02 +02:00
```sh
2017-01-20 23:19:03 +02:00
$ gops version <pid>
devel +6a3c6c0 Sat Jan 14 05:57:07 2017 +0000
2016-11-06 08:57:18 +02:00
```
2017-01-20 23:19:03 +02:00
#### $ gops stats \<pid\>
2017-01-20 23:09:45 +02:00
2017-01-20 23:19:03 +02:00
To print the runtime statistics such as number of goroutines and `GOMAXPROCS`.
2017-01-20 23:09:45 +02:00
2017-01-20 23:19:03 +02:00
#### Profiling
2017-01-20 23:09:45 +02:00
2016-11-06 08:57:18 +02:00
2017-01-20 23:19:03 +02:00
##### Pprof
gops supports CPU and heap pprof profiles. After reading either heap or CPU profile,
it shells out to the `go tool pprof` and let you interatively examine the profiles.
To enter the CPU profile, run:
2016-11-06 08:57:18 +02:00
2016-11-14 08:29:02 +02:00
```sh
2017-01-20 23:19:03 +02:00
$ gops pprof-cpu <pid>
2016-11-06 08:57:18 +02:00
```
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
To enter the heap profile, run:
2016-11-14 08:29:02 +02:00
```sh
2017-01-20 23:19:03 +02:00
$ gops pprof-heap <pid>
2016-11-06 08:57:18 +02:00
```
2016-11-14 08:29:02 +02:00
2017-01-20 23:19:03 +02:00
##### Go execution trace
2017-01-20 23:19:03 +02:00
gops allows you to start the runtime tracer for 5 seconds and examine the results.
2017-01-02 05:54:15 +02:00
```sh
2017-01-20 23:19:03 +02:00
$ gops trace <pid>
```
2017-01-20 23:19:03 +02:00