禁止 openSUSE Tumbleweed 系统的 systemd-coredump

默认情况下,系统中的应用崩溃的时候会使得核心调用 systemd-coredump 来生成相关内存镜像以及一些调试信息。如果该应用运行时占用的内存大,那么这些调试信息会很快占满硬盘空间。应用崩溃是很常见的事情,但一般用户并不需要去调试它,多数人也不知道怎么调试。所以禁用它是个很好的选择。

禁用 systemd-coredump 的方法有些别致,因为 openSUSE 系统设置中并没有提供这样的设置。最简单的方法就是使用一个空文件来屏蔽默认的 systemd-coredump 配置文件,然后重新加载系统配置。

sudo ln -s /dev/null /etc/sysctl.d/50-coredump.conf
sudo systemctl daemon-reload

注:系统里原本是没有 /etc/sysctl.d/50-coredump.conf 这个文件的。真正的配置文件在 /usr/lib/sysctl.d/50-coredump.conf。但是如果在 /etc 中有这个配置文件,系统设定就优先使用它。而这个设置的优先级又是高于下面介绍的 systemd 的配置的优先级的。

当然也可以不那么激进的直接禁用 Core Dump,而只是限制它使用的存储空间大小。根据,

$ man 5 coredump.conf

的提示,限制大小就是在相应的 coredump.conf 里面设置参数 MaxUse=。默认是使用 磁盘空间的 10%。

man 5 coredump.conf 中指出的 coredump 配置文件使用的优先顺序是,

/etc/systemd/coredump.conf
/etc/systemd/coredump.conf.d/*.conf
/run/systemd/coredump.conf.d/*.conf
/usr/lib/systemd/coredump.conf.d/*.conf

所以我们可以直接修改 /etc/systemd/coredump.conf 文件。例如,

[Coredump]
Storage=external
Compress=yes
ProcessSizeMax=2G
ExternalSizeMax=2G
#JournalSizeMax=767M
MaxUse=1
#KeepFree=

就限制最大使用量为磁盘空间的 1%。下面的那个 KeepFree= 则是设置尽量保证磁盘剩余空闲空间不小于设定值(默认是 15%)。这两个参数保证系统会自动清理旧的 coredump 文件。

man 5 coredump.conf 中也指出了,默认的 core dump 文件存放位置是 /var/lib/systemd/coredump/(当 coredump.conf 中有 Storage=external 时);或者直接存放在 journal 中(当 coredump.conf 中有 Storage=journal 时)。

更新 2018-04-01

openSUSE Leap 15 中将会默认关闭 systemd-coredump。参见 SLE 15 的 bug #1083849

参考链接:

  • https://www.freedesktop.org/software/systemd/man/systemd-coredump.html
  • https://github.com/systemd/systemd/issues/659
  • https://bbs.archlinux.org/viewtopic.php?id=154511
  • http://ask.systutorials.com/1512/how-to-disable-the-coredump-function-of-systemd-on-linux
  • https://lists.opensuse.org/opensuse-factory/2018-01/msg00263.html

©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/disable-systemd-coredump-in-opensuse-tw/>。转载请保留此信息及相应链接。

2 条关于 “禁止 openSUSE Tumbleweed 系统的 systemd-coredump” 的评论

  1. 你好,
    今天在无聊,在网上下载了一些appimage游戏。结果出错了,卡了很久。而且,硬盘空间也变小了很多,估计是systemd-coredump生成的垃圾文件给造成的。现在需要把它找出来,然后删除它。我在/分区找了很久,但是都没有找到。
    麻烦告诉一下systemd-coredump生成的文件在哪里,然后我去删除它。

    谢谢

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)