当进程崩溃然后核心转储时,我们遇到了一个问题。由于进程占用内存大——20GB左右,核心转储需要将20GB核心数据写入磁盘,磁盘使用率变得非常高,负载急剧增加。
如何限制核心转储的写入速度?一个进程崩溃使服务器挂起,这太糟糕了。
我相信没有简单的方法。
但是,在 Linux 上,您可以使用该/proc/sys/kernel/core_pattern文件(参见core(5)和proc(5)手册页),甚至可以 - 当它core_pattern以管道符号开头时|- 将核心写入程序(或脚本),然后可能会减慢写作速度。
或者,您可以拥有一些用户空间文件系统(例如通过FUSE)。
并且该core文件可能是指向其他地方的符号链接(例如,会减慢写入速度的 FUSE 文件系统,或者只是某个 SSD 磁盘上的快速文件系统)。
当然,您也可以避免转储内核(通过setrlimit(2)或 shell 的ulimit内置函数,或通过gdb --args...启动程序)
而且我想如果你ionice(1)适当的命令,所有磁盘 I/O 都可以合理地减慢。
PS。我从未测试过这些想法中的任何一个,所以我可能是错的。