获取 Azure Kubernetes 的线程转储/堆转储 pods
Taking Thread dump/ Heap dump of Azure Kubernetes pods
我们正在 运行 在 Azure kubernetes 上使用 java 编写我们的 kafka 流应用程序。我们是 kubernetes 的新手。要调试问题,我们需要获取 运行ning pod 的线程转储。
以下是我们进行转储所遵循的步骤。
使用以下 docker 文件构建我们的应用程序。
FROM mcr.microsoft.com/java/jdk:11-zulu-alpine
RUN apk update && apk add --no-cache gcompat
RUN addgroup -S user1 && adduser -S user1 -G user1
USER user1
WORKDIR .
COPY target/my-application-1.0.0.0.jar .
正在提交带有以下部署 yaml 文件的图像
api版本:apps/v1
种类:部署
元数据:
名称:我的应用程序-v1.0.0.0
规格:
复制品:1
选择器:
匹配标签:
名称:我的应用程序吊舱
应用程序:我的应用程序应用程序
模板:
元数据:
名称:我的应用程序吊舱
标签:
名称:我的应用程序吊舱
应用程序:我的应用程序应用程序
规格:
节点选择器:
代理池:代理池1
容器:
- 名称:my-application-0
图片:myregistry.azurecr.io/my-application:v1.0.0.0
imagePullPolicy:始终
命令:[[java","-jar","my-application-1.0.0.0.jar","input1","$(connection_string)"]
环境:
- 姓名:connection_string
值来自:
配置映射键参考:
名称:我的应用程序配置图
键:连接字符串
资源:
限制:
cpu: "4"
要求:
cpu: "0.5"
要将 shell 放入 运行 容器,您可以 运行 以下命令:
kubectl exec -it -- sh
获取线程转储 运行ning 下面的命令
jstack PID > threadDump.tdump
但是获取权限被拒绝错误
有人可以建议如何解决这个问题或采取 thread/heap 转储的步骤。
提前致谢
由于您可能需要本地线程转储,因此您可以绕过在 pod 中创建文件,直接将其流式传输到本地计算机上的文件:
kubectl exec -i POD_NAME -- jstack 1 > threadDump.tdump
如果您的线程转储很大,您可能需要考虑先通过管道传输到 pv
以获得漂亮的进度条。
我们正在 运行 在 Azure kubernetes 上使用 java 编写我们的 kafka 流应用程序。我们是 kubernetes 的新手。要调试问题,我们需要获取 运行ning pod 的线程转储。
以下是我们进行转储所遵循的步骤。
使用以下 docker 文件构建我们的应用程序。
FROM mcr.microsoft.com/java/jdk:11-zulu-alpine RUN apk update && apk add --no-cache gcompat RUN addgroup -S user1 && adduser -S user1 -G user1 USER user1 WORKDIR . COPY target/my-application-1.0.0.0.jar .
正在提交带有以下部署 yaml 文件的图像
api版本:apps/v1 种类:部署 元数据: 名称:我的应用程序-v1.0.0.0 规格: 复制品:1 选择器: 匹配标签: 名称:我的应用程序吊舱 应用程序:我的应用程序应用程序 模板: 元数据: 名称:我的应用程序吊舱 标签: 名称:我的应用程序吊舱 应用程序:我的应用程序应用程序 规格: 节点选择器: 代理池:代理池1 容器: - 名称:my-application-0 图片:myregistry.azurecr.io/my-application:v1.0.0.0 imagePullPolicy:始终 命令:[[java","-jar","my-application-1.0.0.0.jar","input1","$(connection_string)"] 环境: - 姓名:connection_string 值来自: 配置映射键参考: 名称:我的应用程序配置图 键:连接字符串 资源: 限制: cpu: "4" 要求: cpu: "0.5"
要将 shell 放入 运行 容器,您可以 运行 以下命令:
kubectl exec -it
-- sh 获取线程转储 运行ning 下面的命令
jstack PID > threadDump.tdump
但是获取权限被拒绝错误
有人可以建议如何解决这个问题或采取 thread/heap 转储的步骤。 提前致谢
由于您可能需要本地线程转储,因此您可以绕过在 pod 中创建文件,直接将其流式传输到本地计算机上的文件:
kubectl exec -i POD_NAME -- jstack 1 > threadDump.tdump
如果您的线程转储很大,您可能需要考虑先通过管道传输到 pv
以获得漂亮的进度条。