问题标签 [beam]

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 投票
1 回答
1217 浏览

erlang - RabbitMQ 集群状态:如何从 shell 中解析 Erlang 的光束?

我需要监控 rabbitmq 集群状态。

REST API 不提供有关partitions. 所以我需要使用应用程序rabbitmqctl

我需要检查{partitions,[]},。如果有空[]可以了。否则我有问题。

我从 bash 中找到了使用 erlang 的示例:

rabbitmqctl是否可以使用(或其他工具)解析标准输出erl并返回信息“空/非空”或返回代码?

我绝对不了解 Erlang。

如果有人帮助我,我会很高兴:-)

0 投票
0 回答
253 浏览

elixir - 我是否总是必须在更改配置后运行 mix clean 然后编译?

我对 Elixir 比较陌生,我注意到一些奇怪的东西,我有一个配置,config.exs

有一条线

当我更改 myname 键的值时,我的应用程序的行为就好像该值仍然是“名称”但如果我混合清洁然后编译我的应用程序,它会对新值做出反应,我环顾四周看看配置文件如何已处理,但我似乎找不到任何解释为什么我必须为我的应用程序清理以对更改做出反应的任何东西。

编辑:此应用程序是伞形项目的一部分,我正在更改应用程序的配置,而不是伞形 config.exs

0 投票
1 回答
536 浏览

erlang - Elixir - Phoenix - 功能:erl_posix_msg.message/1 未定义

我有两台服务器运行一个非常简单的 Phoenix 框架 API,每周左右,其中一台服务器开始抛出 502 错误。

如果我只是重新启动凤凰服务器,繁荣,一切都会重新开始。显然这不是一个可扩展的解决方案,但我正在努力诊断正在发生的事情。

任何帮助都会很甜蜜。

谢谢

0 投票
1 回答
35 浏览

types - Erlang 的 typer 推断出奇怪的字符串类型

我正在探索typer,并给它一个函数,除了:

const_str() -> “qwe”。

那家伙的类型推断为:

-spec const_str() -> [101 | 113 | 119,...]

,即“ eqw ”(嗯?!),然后是“...”业务。

看起来常量字符串让typer感到困惑;我知道我不应该这样使用它们,有原子用于此目的;但是当我试图围绕typer(和 Erlang 的类型选项)时,我认为这是令人惊讶和有趣的。谁能解释这里发生了什么?谢谢!

0 投票
1 回答
50 浏览

debugging - 为什么elixir调试器调用内置函数而不是我的,如果它们具有相同的名称

这是一个简单的模块,在函数中有 2 个断点,它们正在调用另一个名称与内置函数完全相同的函数:get/1put/2

在shell中执行它:

可见,get/1从调试器调用会导致执行内置get/1put/2不是我Test模块中的函数。为了正常工作,我需要命名我的函数调用。谁能解释我这种行为?

0 投票
1 回答
883 浏览

erlang - Erlang 二进制泄漏?

我们有一个处理大型 json 有效负载的 erlang/elixir 应用程序(在 18/erts 7.3.1 上)。</p>

这是一个典型的工作流程:

  1. 侦听器从 rabbitmq 获取令牌并发送到 gen_server。

  2. gen_server 将令牌放入具有未来时间(当前 + n 秒)的 ETS 表中。gen_server 中的计划作业将从 ETS 中获取过期的令牌,并使用这些令牌启动几个短期进程。

  3. 这些短暂的进程从elasticsearch(使用hackney)下载30-50k json有效负载并处理它,然后将结果上传回elasticsearch,然后进程立即终止。我们跟踪这些过程并确认它们已经死亡。我们每秒处理 5-10 个这样的请求。

问题:我们看到一个不断增长的二进制空间,并在 48 小时内增长到几个 GB(通过观察者和调试打印看到)。手动 GC 也没有影响。

我们已经添加了“recon”并运行了 recon:bin_leak,但是这只释放了几个 KB,并且对不断增长的二进制空间没有影响。

堆栈:Erlang 18/erts 7.3.1、elixir 1.3.4、hackney 1.4.4、poison 2.2.0、timex 3.1.13 等,这些应用程序也没有占用内存。

过去有没有人遇到过类似的问题?将不胜感激任何解决方案。

2017 年 9 月 15 日更新:

我们将我们的应用程序更新到 Erlang 19/ERTS 8.3,并将 hackney 和毒库更新到最新版本,但仍然没有任何进展。这是 GenServer 中的一些日志,它使用 spawn/receive 或 send_after 定期向自身发送消息。在每个 handle_info 中,它查找一个 ets 表,如果找到任何“合格”条目,它就会产生新进程。如果不是,它只返回一个 {:noreply, state}。我们在函数入口处打印 VM 二进制空间信息(以 KB 为单位),日志如下所示。这是一天中的“安静”时间。可以看到二进制空间逐渐增大。:recon.bin_leak(N) 或 :erlang.garbage_collect() 再次对这种增长没有影响。

11:40:19.896 [警告] 二进制 1: 3544.1328125

11:40:24.897 [警告] 二进制 1: 3541.9609375

11:40:29.901 [警告] 二进制 1: 3541.9765625

11:40:34.903 [警告] 二进制 1: 3546.2109375

--- 一些处理 ---

12:00:47.307 [警告] 二进制 1: 7517.515625

--- 一些处理 ---

12:20:38.033 [警告] 二进制 1: 15002.1328125

在我们的旧 Scala/Akka 应用程序中,我们从未遇到过这样的情况,该应用程序多年来处理 30 倍以上的运行量而没有出现问题或重新启动。我写了两个应用程序。

0 投票
2 回答
175 浏览

erlang - Elixir IEX 在显示提示之前停止,并且不接受输入

我最近尝试启动 iex。我输入iex了shell(我尝试了几个shell,以防万一)并且iex没有提供任何提示等。它就在那儿,如果我键入箭头等特殊键,它们就会被转义并输出。如果我键入control-c它会显示标准光束中断。我检查了它iex指向正确的位置并且没有奇怪的别名,它似乎是正确的。我该如何解决这个问题?

我已经尝试卸载并重新安装 elixir(但还没有安装 erlang),但这并没有解决它。是否有任何我可以检查或删除的缓存文件?

0 投票
1 回答
262 浏览

compiler-errors - 在 Windows 中编译 Erlang 模块时出错

我是 Erlang 和 Stack Overflow 编程的初学者,所以我希望这不是一个非常愚蠢的问题。

我已经在 Windows 10 上从官方网站安装了 Erlang/OTP 20.1。我正在尝试从 erl、werl 或 git bash(从正确的目录)编译一些简单的 Erlang 模块,但出现以下错误:

你认为是什么问题?无论保存在哪里,每个模块都会出现完全相同的错误。有趣的是,我昨天可以毫无问题地编译和运行这些模块,但我昨天遇到了同样的问题!

非常感谢!

贝尔纳特

0 投票
1 回答
1289 浏览

erlang - 更改 Erlang 文件句柄限制?

我在使用 Erlang OTP + Cowboy 应用程序时遇到了麻烦,该应用程序不允许我同时打开足够多的文件。

如何更改 BEAM 中允许的打开文件句柄数?

我可能需要同时打开大约 500 个小文本文件,但文件限制似乎是 224。我从这个小测试程序中得到了 224 的值:

这给

这似乎是 Erlang 问题而不是 Mac OSX 问题,因为从命令行,我得到:

0 投票
0 回答
214 浏览

elixir - 为什么我会得到一个 `Elixir.ModuleName.function is undefined!` 错误,除非我运行`mix clean`

我遇到了一个不寻常的问题,我无法找到答案。我正在使用一个库(libcluster),它允许您定义要在配置文件中使用的函数。所以在我的总括项目中,在一个config/def.exs文件中我有:

config libcluster: connect: {Module.Name, :function, args}dev.exs

然后有一个lib/module/name.exwith函数 def function(arg), do: <some code>

mix run将第一次运行代码。但是,如果我再次运行代码,我会收到错误消息:

** (RuntimeError) Elixir.Module.Name.function/1 is undefined!

如果我运行mix clean,然后mix run一切都会再次运行。为什么我必须在运行代码之前清理代码才能让运行时看到函数?