重新启动 => erlang 主管的瞬态与永久

Posted

技术标签:

【中文标题】重新启动 => erlang 主管的瞬态与永久【英文标题】:restart=>transient vs permanent for erlang supervisor 【发布时间】:2021-01-30 11:03:21 【问题描述】:

我有一个 3 级监督树结构,其中顶层是一个监督者,它产生第二级监督者,后者产生工人。 二级主管和工人都有一个瞬态重启策略。 现在我的工人崩溃并重新启动 max_restart 次。此时,我希望主管崩溃 max_restart 次数,然后***主管崩溃。但是我的二级主管死了,一级主管没有重新启动它。二级主管崩溃了这个日志

Context:    shutdown
Reason:     reached_max_restart_intensity

这是否被认为是“正常”关闭,因此主管没有重新启动,因为我使用的是瞬态重启策略?如果我们希望中级主管重新启动,是否应该始终使用 restart=permanent ?

【问题讨论】:

【参考方案1】:

来自supervisor documentation:

只有在异常终止时才会重新启动瞬态子进程,也就是说,除了正常、关闭或 shutdown,Term 之外的其他退出原因。

由于退出原因是 shutdown,因此您需要使用不同的 restart 策略。

【讨论】:

以上是关于重新启动 => erlang 主管的瞬态与永久的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 主管有一个关键的孩子

如何通过 UNO 存储每个打开文档的瞬态数据?

Hibernate oneToMany - 对象引用一个未保存的瞬态实例

对象引用未保存的瞬态实例 - 在刷新休眠 JPA 之前保存瞬态实例 [重复]

使用单例数据源的瞬态和作用域服务

对象引用未保存的瞬态实例 在刷新错误之前保存瞬态实例