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