獲取容器Core Dump
更新時間 2024-04-22 17:31:24
最近更新時間: 2024-04-22 17:31:24
分享文章
本節介紹云容器引擎的最佳實踐:獲取容器Core Dump。
應用場景
Core Dump是指當一個程序發生嚴重錯誤導致異常終止時,操作系統將該程序當前的內存狀態以及其他相關信息保存到一個特殊的文件中,這個文件通常稱為 core 文件或核心轉儲文件。core文件包含了程序在崩潰時的內存映像、CPU 寄存器狀態、堆棧信息等,可以用于分析程序異常終止的原因。
在容器環境中,Core Dump的處理與傳統的物理機環境略有不同,因為容器本身是在宿主機上運行的,因此需要一些特殊的配置才能捕獲容器內發生的核心轉儲。本節介紹容器中core文件的一般處理流程和相關概念。
將Core Dump文件輸出到主機目錄
開啟節點Core Dump
設置Core Dump文件的輸出路徑
echo "/tmp/cores/core.%t.%e.%p" > /proc/sys/kernel/core_pattern
上述文件路徑中:
- %t:表示coredump的時間。
- %e:表示程序文件名。
- %p:表示進程ID。
將Core Dump的輸出路徑修改為/tmp/cores,后續容器中的應用程序Core Dump文件也將輸出到容器的/tmp/cores文件,因為在容器中讀取的 /proc/sys/kernel/core_pattern文件實質上就是主機的 /proc/sys/kernel/core_pattern文件。
配置容器Core Dump和驗證
通過kubectl或者控制臺完成如下配置:
apiVersion: v1
kind: Pod
metadata:
name: core-volume
spec:
volumes:
- name: coredump-path
hostPath: # 通過hostPath將容器Core Dump持久化在主機
path: /home/coredump
containers:
- name: ubuntu
image: ubuntu:12.04
command: ["/bin/sleep","3600"]
volumeMounts:
- mountPath: /tmp/cores
name: coredump-path
用上述方式創建Pod并進入,觸發當前shell終端的段錯誤。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
core-volume 1/1 Running 0 55s
$ kubectl exec -it core-volume -- /bin/bash
root@core-volume:/# kill -s SIGSEGV $$
在容器實際運行的主機上查看/home/core-dump目錄會生成core文件。
# ls /home/coredump
core.1738160312.core-volume.15