systemd-coredump core文件未压缩或被截断,需调整CoredumpCompress、CoreFileSizeMax和SystemMaxUse等配置:启用压缩需设CoredumpCompress=yes并重载配置;CoreFileSizeMax限制单文件大小,超限则截断;SystemMaxUse限制总存储量,超出时自动清理旧文件。

如果您发现 systemd-coredump 生成的 core 文件未按预期压缩,或被意外截断、丢弃,则可能是由于 CoredumpCompress 配置未生效,或 CoreFileSizeMax 与 SystemMaxUse 等大小限制参数协同作用导致。以下是调整这些行为的具体方法:
一、启用或禁用 core 文件压缩
CoredumpCompress 控制是否对捕获的 core 文件执行 zlib 压缩。该设置位于 /etc/systemd/coredump.conf 或 /etc/systemd/coredump.conf.d/*.conf 中,影响所有后续生成的 core 文件,但不修改已存在的文件。
1、使用文本编辑器打开配置文件:sudo nano /etc/systemd/coredump.conf。
2、取消注释 CoredumpCompress= 行,并将其值设为 yes(启用压缩)或 no(禁用压缩)。
3、保存文件并退出编辑器。
4、重新加载 systemd-manager 配置:sudo systemctl daemon-reload。
二、设置单个 core 文件大小上限
CoreFileSizeMax 限定单个 core 文件在压缩前的最大体积。超过该值时,systemd-coredump 将截断 core 数据并记录警告,而非写入完整内存映像。
1、在 /etc/systemd/coredump.conf 中取消注释 CoreFileSizeMax= 行。
2、赋值为带单位的数值,例如 CoreFileSizeMax=2G(允许最大 2 GiB 的未压缩 core 数据)。
3、若需无限制,可设为 CoreFileSizeMax=0,但实际仍受内核 vm.max_map_count 和可用磁盘空间制约。
4、执行 sudo systemctl kill --signal=SIGUSR2 systemd-coredump 以刷新 coredump 处理器运行时参数。
三、限制 coredump 存储总用量
SystemMaxUse 定义 /var/lib/systemd/coredump 目录下所有 core 文件(含压缩后)占用磁盘空间的硬上限。超出时,最旧的 core 文件将被自动删除,以腾出空间。
1、在 /etc/systemd/coredump.conf 中取消注释 SystemMaxUse= 行。
2、设置目标值,例如 SystemMaxUse=1G 表示最多保留 1 GiB 的压缩后 core 文件。
3、同时建议配置 SystemKeepFree=500M,确保磁盘始终预留至少 500 MiB 空闲空间。
4、运行 sudo systemd-coredump --clean 立即触发一次清理,应用新限制。
四、验证当前配置生效状态
systemd-coredump 不会动态重读全部配置,部分参数需重启服务或触发内核事件才能完全生效。可通过查询运行时状态确认当前策略是否已载入。
1、显示当前解析的配置值:systemd-coredump --settings。
2、检查最近一次 core 捕获日志:journalctl -t systemd-coredump -n 20 --no-pager,观察是否含 “compressed” 或 “truncated” 字样。
3、手动触发测试崩溃(仅限测试环境):kill -SEGV $$,随后检查 /var/lib/systemd/coredump/ 下文件后缀是否为 .zst(若启用 zstd 压缩)或 .gz(zlib)。
4、查看实际存储用量:sudo systemd-coredump --list 输出各文件大小及压缩比。










