本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
coredump.conf, coredump.conf.d — 内存转储配置文件
/etc/systemd/coredump.conf
/etc/systemd/coredump.conf.d/*.conf
/run/systemd/coredump.conf.d/*.conf
/usr/lib/systemd/coredump.conf.d/*.conf
这些配置文件用于控制处理内存转储的
systemd-coredump(8) 工具的行为。
内核是否使用 systemd-coredump 来处理内存转储,
取决于内核的
kernel.core_pattern
参数(参见 sysctl(8) 手册)。
详见
systemd-coredump(8)
与
core(5)
手册页。
默认设置是在编译期间确定的,
所以仅在确实需要修改默认设置的情况下,
才需要使用配置文件。位于
/etc/systemd/
目录中的初始配置文件,
仅包含了展示选项默认值的注释,
目的在于方便系统管理员查看和直接修改。
如果软件包想要自定义某些默认设置,
那么必须将自定义的配置文件安装到
/usr/lib/systemd/*.conf.d/
目录中。
/etc/
目录仅供系统管理员使用。
系统管理员可以利用下面的逻辑来覆盖默认设置:
主配置文件最先被读取,
优先级也最低。
所有 *.conf.d/
中的配置文件
都会覆盖主配置文件中的设置。
所有 *.conf.d/
中的配置文件(无论位于哪个目录中),
统一按照文件名的字典顺序处理。
当多个配置文件都设置了同一个选项的时候:
(1)如果该选项仅接受一个单一值,那么仅以文件名最靠后(字典顺序)的那一个为准;
(2)如果该选项可接受一个值列表,那么将会按照文件名的字典顺序将所有值列表拼接起来。
为了便于排序,
建议给所有 *.conf.d/
中的配置文件
都加上
两位十进制数字的文件名前缀。
如果系统管理员想要屏蔽 /usr/lib/
目录中的某个配置文件,
那么最佳做法是在 /etc/
目录中
创建一个指向 /dev/null
的同名符号链接,
即可彻底屏蔽 /usr/lib/
目录中的
同名文件。
所有选项都位于
"[Coredump]
" 小节:
Storage=
¶在哪里保存内核转储:
"none
" 表示不保存内存转储,
但是会在日志中记录内存转储事件以及可能存在的回溯(backtrace);
默认值 "external
" 表示将内存转储保存到外部
/var/lib/systemd/coredump/
目录中;
"journal
" 表示将内存转储保存到日志中,
并按照正常的日志滚动规则进行滚动。
在将内存转储保存到日志中的时候, 也会遵守日志压缩设置,详见 journald.conf(5) 手册。 在将内存转储保存到外部文件中的时候,默认也会被压缩存储, 详见下文。
Compress=
¶接受一个布尔值,
表示在将内存转储保存到外部文件中的时候,是否要压缩存储。
默认值 "yes
" 表示开启压缩。
ProcessSizeMax=
¶允许处理的最大内存字节数。 超过此大小的内存转储有可能会被保存下来, 但是肯定不会生成回溯(backtrace)。
同时设置 Storage=none
与 ProcessSizeMax=0
将会禁止处理一切内存转储,同时仅为每个内存转储事件记录一条简略的日志消息。
ExternalSizeMax=
, JournalSizeMax=
¶允许保存的最大内存字节数 (未压缩前)。
MaxUse=
, KeepFree=
¶限制保存内存转储的外部文件对磁盘空间的占用。
MaxUse=
限制所有保存内存转储的外部文件总共允许占用的最大磁盘空间(默认值是磁盘总容量的10%),
当总占用空间超过限制时,将会自动删除最老的内存转储文件,
以确保可以不断保存最新的内存转储文件。KeepFree=
控制至少保留多少剩余磁盘空间(默认值是磁盘总容量的15%)。
注意,在处理内存转储的过程中,
磁盘空间的占用有可能会暂时突破这里所设置的限制。
此外,
保存内存转储的外部文件还有可能因为过于陈旧而被
systemd-tmpfiles(8) 删除。
注意,
将这两个选项中的任意一个设为零都表示关闭基于磁盘占用的清理。
所有选项的默认值都以注释的形式罗列在默认安装的
/etc/systemd/coredump.conf
模板文件中。