问题标签 [erlang-supervisor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
566 浏览

erlang - 是否应该将客户端处理过程添加到主管树中?

在 Erlang 中,我有一个进程主管树,其中包含一个接受 tcp/ip 连接的进程。对于每个传入的连接,我都会产生一个新进程。是否应该将此进程添加到主管树中?

问候,史蒂夫

0 投票
3 回答
3324 浏览

erlang - How to explain Erlang's supervision trees?

I tried to explain supervision trees.

My best try is:

ok, You get a chocolate box from the factory, with warranty, "Every bit will taste good." Then if you find that one bit taste funny. You can throw the whole box away. Because you get a new from the factory. That is like supervision trees in Erlang. If one thread misbehave. There is a risk that all threads have bad state. If that is the case, the supervisor throw all threads away and start over. Like the chocolate box, you are the supervisor when you throw the box.

0 投票
2 回答
1599 浏览

erlang - 崩溃后如何恢复进程状态?

重新启动崩溃的进程时保持状态的好方法是什么?

我在 OTP 应用程序中有一个主管,负责监视几个“子系统”gen_server。

例如,一个是“天气”子系统,它每 15 分钟生成一个新的天气状态并处理对当前天气状态的查询。(想想柠檬水摊游戏)

如果该 gen_server 崩溃,我希望它重新启动,但它应该以最近的天气状态重新启动,而不是硬编码在init(). 仅仅因为坠机,模拟状态突然从“冰雹风暴”变成“轻松愉快”是没有意义的。

由于增加了复杂性,我不愿在每次更新后使用 mnesia 或 ETS 来存储状态;有没有更简单的方法?

0 投票
3 回答
462 浏览

erlang - Erlang:级联监督者?

是否可以在应用程序中级联主管?

例如,主管sup1产生一个创建主管的子进程sup2

0 投票
3 回答
5060 浏览

erlang - erlang OTP Supervisor崩溃

我正在阅读 Erlang 文档,试图了解设置 OTP gen_server 和主管的基础知识。每当我的 gen_server 崩溃时,我的主管也会崩溃。事实上,每当我在命令行上出现错误时,我的主管都会崩溃。

我希望 gen_server 在崩溃时重新启动。我希望命令行错误对我的服务器组件没有任何影响。我的主管根本不应该崩溃。

我正在使用的代码是一个基本的“回声服务器”,它回复您发送的任何内容,以及一个最多每分钟重新启动回声服务器 5 次的主管(one_for_one)。我的代码:

echo_server.erl

echo_sup.erl

使用 编译erlc *.erl,这是一个示例运行:

0 投票
2 回答
531 浏览

erlang - 无法从 shell 生成 erlang 主管

我已经实现了 gen_server 和 supervisor:test_servertest_sup. 我想从 shell/CLI 测试它们。我已经编写了它们的start_link函数,以便它们的名称在本地注册。

我发现我可以test_server从命令行生成就好了,但是生成的test_sup根本不允许我与服务器交互。

例如,我可以test_server通过执行产生一个:

我可以与服务器交互,一切看起来都很好。

但是,如果我尝试用 做同样的事情test_sup,我的“CLI 进程”(使用registered/0)中不会注册新的名称/Pid。Mytest_server似乎已生成,但我无法与之交互(请参阅 Lukas Larsson 对 SASL 的评论以了解为什么这是真的)。

我假设我在主管中编写了一个错误,但是这种启动主管的方法非常有效:

为什么我可以生成 gen_server 但不能生成主管?


更新

我正在使用的代码可以在这篇文章中找到。我正在使用echo_serverand echo_sup,两个非常简单的模块。

鉴于该代码,这有效:

这不会:

0 投票
1 回答
576 浏览

erlang - Erlang Supervisor 重启与宕机主机连接的策略

我使用 erlang 作为服务之间的桥梁,我想知道人们对处理断开的连接有什么建议?

我从本地文件中获取输入并将它们传送到 AMQP,可以想象 AMQP 代理可能会出现故障。对于这种情况,我想继续重试连接到 AMQP 服务器,但我不想将 CPU 与这些连接尝试挂钩。我倾向于在 AMQP 代码的重新启动中休眠。那'hack'不会本质上绕过快速失败并让erlang处理它的目的吗?更一般地说,是否应该使用 erlang 主管行为来处理断开的连接?

0 投票
3 回答
2813 浏览

erlang - 自动重启 Erlang 应用程序

我最近遇到了一个错误,整个 Erlang 应用程序都死了,产生了如下所示的日志消息:

我不知道是什么触发了这次关闭,但我遇到的真正问题是它没有自行重启。相反,现在空无一物的 Erlang VM 只是坐在那里无所事事。

现在,根据我所做的研究,您可以为应用程序提供其他“启动类型”:“瞬态”和“永久”。

如果我在应用程序中启动主管,我可以告诉它使特定进程成为临时或永久的,它会自动为我重新启动它。但是,根据文档,如果我将应用程序设为临时或永久,它不会在它死时重新启动它,而是会杀死所有其他应用程序。

我真正想做的是以某种方式告诉 Erlang VM 一个特定的应用程序应该始终运行,如果它出现故障,重新启动它。这可能吗?

(我不是在谈论在我的应用程序之上实现一个主管,因为这是一个问题 22:如果我的主管进程崩溃了怎么办?我正在寻找某种 API 或设置,我可以用它来让 Erlang 监视器和为我重新启动我的应用程序。)

谢谢!

0 投票
2 回答
1700 浏览

erlang - 如何找到 OTP 流程的主管?

是否有功能可以让 OTP 进程找到其主管的 pid?

0 投票
2 回答
676 浏览

java - Erlang OTP 监督 Java 应用程序

我最近熟悉了 Erlang/OTP 技术,我想用它来监控和监督 Java 应用程序:

  • 检测它们的可用性
  • 启动和停止它们

换句话说,我希望 Java 应用程序被 Erlang OTP 主管基础设施视为可以由这些主管管理的常规 Erlang 应用程序(发送心跳,按需停止和启动)。可行吗?如果是,我必须使用什么工具?

为简化起见,我们假设Java 应用程序是一个简单的 jar,其中指定了 Main 类。允许检测/扩展这些应用程序。