Skip to content

Commit 358120e

Browse files
committed
docs(profiling): add basic usage doc
1 parent c890e84 commit 358120e

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

Documentation/design/profiling.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Profiling OLM Operators
2+
3+
OLM's `olm` and `catalog` commands support serving profiling samples via the `--profiling` option.
4+
5+
```sh
6+
# run olm operator with profiling enabled
7+
$ go run cmd/olm/main.go --profiling --kubeconfig ~/.kube/config
8+
```
9+
10+
Samples are in a format recognized by [pprof](https://golang.org/pkg/net/http/pprof) and an index of available profile types is made available at `https://127.0.0.1:8080/debug/pprof`.
11+
12+
If profiling is enabled, but operators are running on a kubernetes cluster, a convienient way to expose samples locally is with `kubectl port-forward`:
13+
14+
```sh
15+
# forward traffic from 127.0.0.1:8080 to port 8080 of catalog operator pods
16+
$ kubectl -n <olm-namespace> port-forward deployments/catalog-operator
17+
```
18+
19+
When profiling is enabled, `go tool pprof` can be used to export and visualize samples:
20+
21+
```sh
22+
# assuming a catalog operator's samples are accessible at 127.0.0.1:8080:
23+
# show in-use heap memory in top format
24+
$ go tool pprof -top http://127.0.0.1:8080/debug/pprof/heap
25+
Fetching profile over HTTP from http://127.0.0.1:8080/debug/pprof/heap
26+
Saved profile in /Users/nhale/pprof/pprof.catalog.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz
27+
File: catalog
28+
Type: inuse_space
29+
Time: Jun 27, 2019 at 12:27pm (EDT)
30+
Showing nodes accounting for 2202.74kB, 100% of 2202.74kB total
31+
flat flat% sum% cum cum%
32+
650.62kB 29.54% 29.54% 650.62kB 29.54% bufio.NewWriterSize
33+
520.04kB 23.61% 53.15% 520.04kB 23.61% golang.org/x/net/http2.NewFramer.func1
34+
520.04kB 23.61% 76.75% 520.04kB 23.61% sync.(*Map).LoadOrStore
35+
512.03kB 23.25% 100% 512.03kB 23.25% github.com/modern-go/reflect2.newUnsafeStructField
36+
...
37+
38+
# save in-use objects graph to svg file
39+
$ go tool pprof -sample_index=inuse_objects -svg http://127.0.0.1:8080/debug/pprof/heap
40+
Fetching profile over HTTP from http://127.0.0.1:8080/debug/pprof/heap
41+
Saved profile in /Users/<user>/pprof/pprof.catalog.alloc_objects.alloc_space.inuse_objects.inuse_space.01.pb.gz
42+
Generating report in profile001.svg
43+
```

0 commit comments

Comments
 (0)