获取容器Core Dump 本节介绍云容器引擎的最佳实践:获取容器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/corepattern 上述文件路径中: %t:表示coredump的时间。 %e:表示程序文件名。 %p:表示进程ID。 将Core Dump的输出路径修改为/tmp/cores,后续容器中的应用程序Core Dump文件也将输出到容器的/tmp/cores文件,因为在容器中读取的 /proc/sys/kernel/corepattern文件实质上就是主机的 /proc/sys/kernel/corepattern文件。 配置容器Core Dump和验证 通过kubectl或者控制台完成如下配置: apiVersion: v1 kind: Pod metadata: name: corevolume spec: volumes: name: coredumppath hostPath: 通过hostPath将容器Core Dump持久化在主机 path: /home/coredump containers: name: ubuntu image: ubuntu:12.04 command: ["/bin/sleep","3600"] volumeMounts: mountPath: /tmp/cores name: coredumppath 用上述方式创建Pod并进入,触发当前shell终端的段错误。 $ kubectl get pod NAME READY STATUS RESTARTS AGE corevolume 1/1 Running 0 55s $ kubectl exec it corevolume /bin/bash root@corevolume:/ kill s SIGSEGV $$ 在容器实际运行的主机上查看/home/coredump目录会生成core文件。 ls /home/coredump core.1738160312.corevolume.15