Erlang热重装和坏人

Med*_*her 5 erlang

我有一个设置,我有四个服务器运行实例,每个服务器盒两个实例.我的服务器涉及大量传递匿名函数并在不同的线程(可能在不同的服务器上)运行它们.

今天我做了一个代码重新加载,其中涉及更改其中一个实例上的某些静态函数的内容(计划按顺序执行每个实例).在重新加载后,我遇到了大量的badfun错误.该盒子上的另一个实例也开始喷出类似的错误.另一个盒子上的两个实例我们似乎没有受到影响.

我发现这篇文章:http: //www.javalimit.com/2010/05/passing-funs-to-other-erlang-nodes.html 这似乎意味着这些错误的原因是匿名函数有不同的版本在两个节点之间,因此它破裂了.但是,在测试中我无法重现此错误.此外,我已经多次重新加载代码而没有看到这样的东西.然而,这是我第一次重新加载每个盒子两个实例(以前它是每盒一个实例).有没有人对为什么会发生这种情况有任何见解,也许是如何防止它(没有杀死所有东西并重新启动它,这是我必须要做的).

Luk*_*kas 3

为了识别 funs,erlang 虚拟机对代码进行哈希处理并将其合并到 fun 标识符中。正是这个标识符被发送到另一个节点,当尝试在远程端访问该乐趣时,它无法找到该哈希的乐趣。

要查看实际情况,请使用一段带有匿名 fun 的代码并将其加载到一个虚拟机中,然后编辑该 fun 并将新代码加载到一个单独的虚拟机上。然后尝试将原始的fun发送到第二个vm并执行它。