gpt4 book ai didi

erlang - 达到 max_restart_intensity 的主管如何才能删除有问题的 child ?

转载 作者:行者123 更新时间:2023-12-02 22:48:10 28 4
gpt4 key购买 nike

我有一个 one_for_one 主管来处理类似且完全独立的 child 。

当一个 child 出现问题时,反复崩溃并触发:

=SUPERVISOR REPORT==== 30-Mar-2011::13:10:42 ===
Supervisor: {local,gateway_sup}
Context: shutdown
Reason: reached_max_restart_intensity
Offender: [{pid,<0.76.0>}, ...

关闭自身并终止所有无辜的 child ,否则他们将继续正常运行。

我怎样才能用标准的 Erlang 监督者构建一棵监督树,只停止重新启动一个有问题的 child ,而不会影响其他 child ?

我正在考虑增加一名主管,只带一个 child ,但这对我来说似乎很重要。

还有其他方法可以解决这个问题吗?

最佳答案

我认为最好的解决方案是有两层监督。

一个主管为您要运行的每个gen_server启动一个主管+进程对。该主管配置了 one_for_one 策略和临时 子级。

在此监督程序下运行的每个监督程序都将正确配置 MaxRMaxT 值,一旦子级行为不当,将触发该监督程序崩溃。

当较低级别的主管崩溃时,顶级主管“只是不在乎”。

当以一个子进程(总堆大小)启动时,Supervisor 会消耗 233 个字节,因此内存消耗不应成为问题。

监督树应该如下所示:

supervisor_top
|
|
+------------------------+----- ...
| |
supervisor_1 supervisor_2
restart temporary restart temporary
| |
gen_server_1 gen_server_2
restart transient restart transient

关于erlang - 达到 max_restart_intensity 的主管如何才能删除有问题的 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com