|
| 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