(可选)安装systemd-coredump工具
systemd-coredump是由systemd提供的一个核心转储(core dump)处理与收集工具。当进程崩溃(例如收到SIGSEGV、SIGABRT等信号)时,系统内核会尝试生成core dump文件,用于调试分析。而systemd-coredump接管了这一步骤,使核心转储的生成、压缩、存储、记录与访问更加安全、高效、可控。
操作步骤
通过在宿主机安装systemd-coredump并保存core dump文件,容器和Pod内无需任何操作。
- 安装systemd-coredump,OpenEuler操作系统默认已经安装,Ubuntu操作系统执行以下命令进行安装。
apt install systemd-coredump
安装systemd-coredump后,可能造成网络共享存储出现“Input/Output Error”报错,重启宿主机后即可修复。
- 执行以下命令查看systemd-coredump是否安装成功。
ls -l /usr/lib/systemd/systemd-coredump
打印信息中有以下内容则表示安装成功:
/usr/lib/systemd/systemd-coredump
- 配置systemd-coredump,执行以下命令打开coredump.conf文件。
vi /etc/systemd/coredump.conf
推荐配置样例如下所示,参数解释如表1所示:
[Coredump] Storage=external Compress=yes ProcessSizeMax=300G ExternalSizeMax=300G JournalSizeMax=512M MaxUse=10G KeepFree=2G
表1 coredump.conf关键参数说明 参数
取值范围
说明
Storage
- none:不保存core dump文件。
- external:将core dump文件保存至磁盘的/var/lib/systemd/coredump/目录,也可以使用coredumpctl命令进行查看。
- journal:将core dump文件不保存到磁盘,仅写入systemd journal,可用coredumpctl命令进行查看。
- both:同时保存到磁盘和journal。
配置core dump的保存位置,默认值:external。
Compress
- yes:开启。
- no:不开启。
是否启用压缩功能。启用后,systemd-coredump会压缩core dump文件,默认值:yes。
- 压缩率高达100~300倍(取决于压缩格式)。
- Ubuntu通常以zstd格式压缩,OpenEuler以lz4格式压缩。
ProcessSizeMax
-
允许处理的最大内存字节数。 超过此大小的内存转储有可能会被保存下来, 但是肯定不会生成回溯。
同时设置Storage=none与ProcessSizeMax=0时将会禁止处理一切内存转储,同时仅为每个内存转储事件记录一条简略的日志消息。
ExternalSizeMax
-
允许保存的最大内存字节数 (未压缩前)。
建议设为300G,MindIE程序实测中最大core dump约为120GB,可根据磁盘大小设置合适值。
JournalSizeMax
-
当参数Storage取值为journal或both时,限制core dump写入systemd journal的大小,当core dump超过设置的值就停着写入systemd journal。
当Storage配置为external时,该参数无效。
MaxUse
- 置空:不限制;(不推荐)
- 其他值:单位有K、M和G,如果设置为10G,表示/var/lib/systemd/coredump/目录最多占用10GB。
限制/var/lib/systemd/coredump/目录占用的最大空间,建议设置为10GB。
当超过该限制时,core dump文件就会以轮转模式存入。
KeepFree
-
保留磁盘可用的空间阈值。
即使未到参数MaxUse设置的值,若磁盘剩余空间低于该值,则core dump文件就会以轮转模式存入。
例:KeepFree=2G,表示保证磁盘至少预留2GB的空闲空间。
- 执行以下命令使能配置。
sudo echo "|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %e" > /proc/sys/kernel/core_pattern sudo systemctl daemon-reexec sudo systemctl daemon-reload
- 执行以下命令查看core dump的相关信息与调试。
- 查看已保存的coredump:
sudo coredumpctl list
- 查看core dump的详细信息:
sudo coredumpctl info <PID>
- 导出core dump到文件:
sudo coredumpctl dump <PID> > /tmp/corefile
- 分析core dump:
gdb /path/to/program /tmp/corefile
- 查看已保存的coredump: