Need help with gops?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

5.1K Stars 275 Forks BSD 3-Clause "New" or "Revised" License 182 Commits 23 Opened issues


A tool to list and diagnose Go processes currently running on your system

Services available


Need anything else?

Contributors list


GitHub Action Status Build status GoDoc

gops is a command to list and diagnose Go processes currently running on your system.

$ gops
983   980    uplink-soecks  go1.9   /usr/local/bin/uplink-soecks
52697 52695  gops           go1.10  /Users/jbd/bin/gops
4132  4130   foops        * go1.9   /Users/jbd/bin/foops
51130 51128  gocode         go1.9.2 /Users/jbd/bin/gocode


$ go get -u


For processes that starts the diagnostics agent, gops can report additional information such as the current stack trace, Go version, memory stats, etc.

In order to start the diagnostics agent, see the hello example.

package main

import ( "log" "time"



func main() { if err := agent.Listen(agent.Options{}); err != nil { log.Fatal(err) } time.Sleep(time.Hour) }

Otherwise, you could set

environment variables to assign your config dir. Default, gops will use the current user's home directory(AppData on windows).


It is possible to use gops tool both in local and remote mode.

Local mode requires that you start the target binary as the same user that runs gops binary. To use gops in a remote mode you need to know target's agent address.

In Local mode use process's PID as a target; in Remote mode target is a


Listing all processes running locally

To print all go processes, run

without arguments:
$ gops
983   980    uplink-soecks  go1.9   /usr/local/bin/uplink-soecks
52697 52695  gops           go1.10  /Users/jbd/bin/gops
4132  4130   foops        * go1.9   /Users/jbd/bin/foops
51130 51128  gocode         go1.9.2 /Users/jbd/bin/gocode

The output displays: * PID * PPID * Name of the program * Go version used to build the program * Location of the associated program

Note that processes running the agent are marked with

next to the PID (e.g.

$ gops <pid> [seconds]

To report more information about a process, run

following by a PID:

If set the seconds arg, the percent of the CPU time this process uses within given time duration will be reported.

$ gops 
parent PID:   5985
threads:      27
memory usage:     0.199%
cpu usage(all): 0.139%
cpu usage(1s):    19.5% # if seconds provided
username:     jbd
cmd+args:     /Applications/   Helper -pid 5985
local/remote:  :0 (LISTEN)
local/remote: (ESTABLISHED)
local/remote: (ESTABLISHED)

$ gops tree

To display a process tree with all the running Go processes, run the following command:

$ gops tree

... ├── 1 │   └── 13962 [gocode] {go1.9} ├── 557 │   └── 635 [com.docker.supervisor] {go1.9.2} │   └── 638 [com.docker.driver.amd64-linux] {go1.9.2} └── 13744 └── 67243 [gops] {go1.10}

$ gops stack (<pid>|<addr>)

In order to print the current stack trace from a target program, run the following command:

$ gops stack (|)
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, 0xc42000e008, 0xc420186000, 0x1, 0x1, 0x0, 0x0)
    /Users/jbd/src/ +0x1b3
    /Users/jbd/src/ +0x2b2
created by
    /Users/jbd/src/ +0x480
# ...

$ gops memstats (<pid>|<addr>)

To print the current memory stats, run the following command:

$ gops memstats (|)

$ gops gc (<pid>|<addr>)

If you want to force run garbage collection on the target program, run

. It will block until the GC is completed.

$gops setgc (<pid>|<addr>)

Sets the garbage collection target to a certain percentage. The following command sets it to 10%:

$ gops setgc (|) 10

$ gops version (<pid>|<addr>)

gops reports the Go version the target program is built with, if you run the following:

$ gops version (|)
devel +6a3c6c0 Sat Jan 14 05:57:07 2017 +0000

$ gops stats (<pid>|<addr>)

To print the runtime statistics such as number of goroutines and




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 interactively examine the profiles.

To enter the CPU profile, run:

$ gops pprof-cpu (|)

To enter the heap profile, run:

$ gops pprof-heap (|)
Execution trace

gops allows you to start the runtime tracer for 5 seconds and examine the results.

$ gops trace (|)

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.