我們正在用 java 撰寫的 Azure kubernetes 上運行我們的 kafka 流應用程式。我們是 kubernetes 的新手。為了除錯一個問題,我們想要獲取正在運行的 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 檔案提交影像
apiVersion: apps/v1 kind: Deployment metadata: name: my-application-v1.0.0.0 spec: replicas: 1 selector: matchLabels: name: my-application-pod app: my-application-app template: metadata: name: my-application-pod 標簽:名稱:my-application-pod 應用程式:my-application-app 規范:nodeSelector:agentpool:agentpool1 容器:-名稱: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)"] env: - name: connection_string valueFrom : configMapKeyRef: name: my-application-configmap key: connectionString resources: limits: cpu: "4" requests: cpu: "0.5"
要獲取運行容器的 shell,您可以運行以下命令:
kubectl exec -it <POD_NAME> -- sh
在命令下運行執行緒轉儲
jstack PID > threadDump.tdump
但獲得權限被拒絕錯誤

有人可以建議如何解決這個問題或采取執行緒/堆轉儲的步驟。提前致謝
uj5u.com熱心網友回復:
由于您可能需要在本地進行執行緒轉儲,因此您可以繞過在 pod 中創建檔案并將其直接流式傳輸到本地計算機上的檔案:
kubectl exec -i POD_NAME -- jstack 1 > threadDump.tdump
如果您的執行緒轉儲很大,您可能需要首先考慮管道pv以獲得一個不錯的進度條。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369249.html
標籤:天蓝色 Kubernetes azure-aks 堆转储 线程转储
