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 https://127.0.0.1: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 |