调试 RabbitMQ Kubernetes 运算符
本文介绍如何调试 RabbitMQ Kubernetes 运算符的运行实例。
检索 Kubernetes 运算符 Pod 的 CPU/内存使用信息
重要提示: 请勿在生产系统上完成以下步骤。
通过使用 pprof 工具,您可以公开 Kubernetes 运算符 Pod 的 CPU 和内存性能分析数据。性能分析是一种调试技术,用于通过公开有关软件的内存、CPU 和异步消耗信息来生成有关软件运行方式的数据。
例如,如果您发现其中一个运算符 Pod 的资源消耗很高,您可能需要这样做。要使用 pprof
工具,请完成以下步骤启用它
- 通过运行以下命令,在您要从中检索调试信息的运算符上启用
ENABLE_DEBUG_PPROF
变量。例如,对于集群运算符,运行
$ kubectl -n rabbitmq-system set env deployment/rabbitmq-cluster-operator ENABLE_DEBUG_PPROF=True
deployment.apps/rabbitmq-cluster-operator env updated
- 使用 kubectl,完成
port-forward
操作,以便可以从运算符 Pod 上的正确端口在您的机器上收集指标。对于 RabbitMQ 集群运算符,默认端口是9782
,对于所有其他运算符,端口是8080
。例如,要在 RabbitMQ 集群运算符 Pod 上完成port-forward
操作,请运行
$ kubectl -n rabbitmq-system port-forward deployment/rabbitmq-cluster-operator 9782
Forwarding from 127.0.0.1:9782 -> 9782
Forwarding from [::1]:9782 -> 9782
- 在单独的终端中,您现在可以使用
go tool pprof
来分析运算符 Pod 的性能。例如,要分析 Pod 中的内存分配,请运行
$ go tool pprof "localhost:9782/debug/pprof/heap"
Fetching profile over HTTP from http://localhost:9782/debug/pprof/heap
Saved profile in /home/pprof/pprof.manager.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
这将打开一个浏览器窗口,以可视化配置文件中的内存分配。有关如何使用 pprof 的更多信息,请参阅此处。
下表列出了运算符公开的配置文件。
路径 | 配置文件描述 |
---|---|
/debug/pprof | 系统上所有可用配置文件的列表。 |
/debug/pprof/allocs | 所有过去内存分配的样本。 |
/debug/pprof/block | 导致同步原语阻塞的堆栈跟踪。 |
/debug/pprof/cmdline | 当前程序的命令行调用。 |
/debug/pprof/goroutine | 所有当前 goroutine 的堆栈跟踪。 |
/debug/pprof/heap | 活动对象的内存分配样本。您可以指定 gc GET 参数以在获取堆样本之前运行 GC。例如:/debug/pprof/heap?gc=1 |
/debug/pprof/mutex | 持有争用互斥锁的持有者的堆栈跟踪。 |
/debug/pprof/profile | CPU 性能分析文件。您可以以 seconds GET 参数指定持续时间。例如:/debug/pprof/profile?seconds=5 |
/debug/pprof/threadcreate | 导致创建新操作系统线程的堆栈跟踪。 |
/debug/pprof/trace | 当前程序执行的跟踪。您可以以 seconds GET 参数指定持续时间。例如:/debug/pprof/trace?seconds=5 |