问题标签 [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.
erlang - 当工人这样做时,主管崩溃,而主管不应该这样做
我有一个 Erlangsupervisor
来监督基于 的工作服务器的进程gen_server
,我启动form the shell
了我的主管,这反过来又毫无问题地启动了我的工作服务器,它看起来像这样:
但是当我让我的工作服务器崩溃时,我的主管会因为未知原因而崩溃。
我在互联网上找到了一个解决方法,我使用这个:
现在它工作正常,但我不明白为什么,谁能解释一下?
**
更新
**
这是我的初始化函数
erlang - 如何分发 Erlang 进程(主管行为)?
我有一个运行主管行为的 Erlang 应用程序。现在我想将它分布在不同的节点上,这意味着受监督的进程应该在不同的计算机上运行。
尽管我阅读了 OTP 文档,但我还没有掌握如何配置我的应用程序来执行此操作。
目前,该.app
文件如下所示:
如果我有两台计算机运行名为 Erlang 的 VM,如何配置应用程序以在两台计算机上运行一些受监督的进程?
architecture - 谷歌分布式监督模型的架构
我在网上阅读了一篇有趣的帖子,其中一位谷歌员工讨论说谷歌不会从 Erlang 的监督模型中受益,因为他们已经在他们的基础设施中构建了一个等效的监督模型:
(完全披露:我在 google 工作,也喜欢 erlang) Erlang 具有出色的健壮性和并发性。它不具备类型安全性,并且在以高性能方式处理文本方面非常糟糕。因此,如果您不关心这些事情中的任何一个而只关心健壮性和并发性,那么 Erlang 就很棒。这里有关于 Erlang 的内部讨论,但结果是。我们已经在我们的基础设施中基本上复制了 Erlangs 监督模型,只是我们对所有语言都这样做了,而 Erlang 并没有为我们提供任何性能优势。
来源:http ://erlang.org/pipermail/erlang-questions/2013-August/075135.html
尽管在网上搜索,但我找不到任何关于他们监督模型的信息(很可能我使用了错误的搜索词进行搜索)。
问题:
- 谷歌的监督模型架构是怎样的?
- 对于 Google 发布的许多创新,后来也出现了提供相同功能的开源软件(例如 Google BigTable -> HBase、MapReduce -> Hadoop 等)。Netflix 的参展商是否履行了上述引述中提到的谷歌监管基础设施所期望的所有角色?
erlang - Erlang 主管终止行为
我有一个可能是不寻常的情况,一个启动 2 个顶级主管的应用程序,例如,
他们都有{one_for_one, 0, 1}
重启策略。他们的孩子实现了一个crash
引发 bad_match 错误的简单函数。
对于我的问题,如果我调用sup1_child1:crash()
主管sup1
将终止但应用程序将继续运行(即主管sup2
及其子级仍然可用)。相反,如果我调用sup2_child1:crash()
,则整个应用程序将终止。后一种行为是我在这两种情况下所期望的。如果我翻转start_link()
通话的顺序,即
然后崩溃 sup1 将导致应用程序终止,但崩溃 sup2 不会。所以看起来 start_link() 被调用的顺序决定了哪个主管崩溃将导致应用程序终止。这是预期的吗?还是我通过拥有 2 个根监督者来滥用监督树功能?
谢谢,
富有的
functional-programming - Erlang 主管有一个关键的孩子
我们正在重新组织我们的应用程序监督树,以使其更稳健地处理故障和重新启动。但是,我们有一个场景,我们有一个父主管启动四个子主管。我们遇到的问题是第一个子主管启动了几个子 gen_server,这些子 gen_servers 必须在第二个子主管启动之前启动和初始化,否则它将失败。
所以,我需要一个像下面这样的启动:
test_app.erl -> super_supervisor -> [config_supervisor, auth_supervisor, rest_supervisor]
我遇到问题的技巧是 config_supervisor 必须在启动 auth_supervisor 或 rest_supervisor 之前完成所有初始化。使用 rest_for_one 启动策略,我基本上得到了这种行为,但只能通过允许 auth_supervisor 失败,因为所需的配置不存在。在继续使用 auth_supervisor 之前,我宁愿只请求完成 config_supervisor 的初始化(包括启动多个 gen_servers)。
这似乎是一个以前会被征服的常见场景,但是,我很难“谷歌搜索”一个解决方案。有没有人有可能存在处理这种情况的建议或示例代码?
erlang - 为什么我们需要 simple_one_for_one?
有人告诉我 simple_one_for_one 对于聊天应用程序非常有用,因为每个聊天客户端都是一个服务器进程(gen_server)。这是正确的吗?
我想知道为什么我们需要它?为什么不只创建一个中心服务器(gen_server)来处理所有聊天客户端通信?因为可能聊天客户端的数量非常多,所以只有一台服务器无法快速处理,导致系统变慢?
我认为可能创建太多像 simple_one_for_one 这样的服务器可能会占用太多系统资源。我是一个新的 OTP 人,所以我真的需要解释这一点。
erlang - Erlang OTP 主管 gen_tcp - {error,eaddrinuse}
我看不到将主管添加到崩溃的 gen_tcp:listen-thread 将如何实际重新启动该工作程序。由于崩溃会使我想听的端口暂时无用。当发生崩溃并且我尝试手动重新启动我的应用程序时,我收到“{error,eaddrinuse}”。我还没有为这个工人实施任何主管,因为我看不到它是如何工作的。
如何重新启动 gen_tcp:listen?
erlang - 编写在受监督进程死亡时不会失败的测试
我正在用 ExUnit 编写一些测试来说明不同的 Supervisor 策略是如何工作的。我计划通过故意导致生成的进程失败来测试结果,然后测试重新启动的进程的输出。
到目前为止,我未能成功创建通过测试,因为初始过程失败会导致测试失败。我已经尝试在 Supervisor/GenServer 实现和测试实现中捕获错误(try/catch),但我无法捕获任何错误并避免测试失败。
- 有什么方法可以捕获这些错误,以免它们触发测试失败?
- 是否有更好/不同的方法来测试不同的主管策略?
谢谢!
erlang - 如何在不重新启动erlang中的服务器的情况下启动新添加的主管?
我们有一个在远程节点上运行的服务器。现在我们想在不停止服务器的情况下添加一个新特性(由 gen_* 实现)。所以我使用 rpc:call(Node, my_sup, start_link, []) 来启动主管。但不幸的是,我发现主管链接到我的本地 shell 而不是远程节点,并且在 rpc:call 之后它立即失败(sup 进程被杀死)。
我只是想知道有没有其他方法可以动态远程启动新添加的主管?
exception - 启动工作人员时的 Erlang 主管异常
我正在使用取自http://learnyousomeerlang.com/building-applications-with-otp的主管树代码,但我得到一个 noproc 异常,当我尝试让主管启动孩子时我无法弄清楚过程。这是我的shell交互:
代码是:
=====
====
========
===
====
[剪辑]