当进程崩溃然后核心转储时,我们遇到了一个问题。由于进程占用内存大——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。我从未测试过这些想法中的任何一个,所以我可能是错的。