默认情况下,系统中的应用崩溃的时候会使得核心调用 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
本文发表于水景一页。永久链接:<http://cnzhx.net/blog/disable-systemd-coredump-in-opensuse-tw/>。转载请保留此信息及相应链接。
你好,
今天在无聊,在网上下载了一些appimage游戏。结果出错了,卡了很久。而且,硬盘空间也变小了很多,估计是systemd-coredump生成的垃圾文件给造成的。现在需要把它找出来,然后删除它。我在/分区找了很久,但是都没有找到。
麻烦告诉一下systemd-coredump生成的文件在哪里,然后我去删除它。
谢谢
我更新了一下文章内容。你要找的内容在更新的结尾。