RabbitMQ作为Windows服务:rpc.erl上的badarith错误
我在Windows上作为服务启动RabbitMQ时遇到一些问题RabbitMQ作为Windows服务:rpc.erl上的badarith错误,windows,cookies,service,erlang,rabbitmq,Windows,Cookies,Service,Erlang,Rabbitmq,我在Windows上作为服务启动RabbitMQ时遇到一些问题 操作系统:Windows 8(Microsoft Windows NT 6.2版服务器) (构建9200) Erlang:R16B03(erts-5.10.4) RabbitMQ:3.2.2 目标:创建一个包含三台服务器的RabbitMQ集群:Srv1、Srv2、Srv3 注:我已仔细阅读了官方文件 以下所有操作均以用户“管理员”身份执行 第一个场景:从命令行作为后台进程启动RabbitMQ 我在Srv1上使用了命令“rabbi
- 操作系统:Windows 8(Microsoft Windows NT 6.2版服务器) (构建9200)
- Erlang:R16B03(erts-5.10.4)
- RabbitMQ:3.2.2
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: unable to connect to node 'rabbit@RABBITMQ-NODE4': nodedown
DIAGNOSTICS
===========
nodes in question: ['rabbit@RABBITMQ-NODE4']
hosts, their running nodes and ports:
- RABBITMQ-NODE4: [{rabbit,49428},{rabbitmqctl3045334,49434}]
current node details:
- node name: 'rabbitmqctl3045334@rabbitmq-node4'
- home dir: C:\Users\Administrator
- cookie hash: 0DLAKf8pOVrGC016+6BDBw==
我们知道这没关系,因为这两种饼干是不同的。
因此,我将.erlang.cookie文件从C:\Windows复制到C:\Users\Administrator,然后重试相同的命令。这次我得到:
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: unable to connect to node 'rabbit@RABBITMQ-NODE4': nodedown
DIAGNOSTICS
===========
nodes in question: ['rabbit@RABBITMQ-NODE4']
hosts, their running nodes and ports:
- RABBITMQ-NODE4: [{rabbitmqctl1178095,49471}]
current node details:
- node name: 'rabbitmqctl1178095@rabbitmq-node4'
- home dir: C:\Users\Administrator
- cookie hash: TIuqp21HOQSoUJT8JfgRQw==
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: {badarith,[{rabbit_vm,bytes,1,[]},
{rabbit_vm,'-mnesia_memory/0-lc$^0/1-0-',1,[]},
{rabbit_vm,mnesia_memory,0,[]},
{rabbit_vm,memory,0,[]},
{rabbit,status,0,[]},
{rpc,'-handle_call_call/6-fun-0-',5,
[{file,"rpc.erl"},{line,205}]}]}
请注意rpc.erl第205行末尾的错误:“badarith”。
我认为该文件是Erlang\lib\kernel-2.16.4\src\rpc.erl
功能如下:
handle_call_call(Mod, Fun, Args, Gleader, To, S) ->
RpcServer = self(),
%% Spawn not to block the rpc server.
{Caller,_} =
erlang:spawn_monitor(
fun () ->
set_group_leader(Gleader),
Reply =
%% in case some sucker rex'es
%% something that throws
case catch apply(Mod, Fun, Args) of
{'EXIT', _} = Exit ->
{badrpc, Exit};
Result ->
Result
end,
RpcServer ! {self(), {reply, Reply}}
end),
{noreply, gb_trees:insert(Caller, To, S)}.
第205行是“案例捕获应用(Mod、Fun、Args)”
第三种方案:以命名用户身份启动RabbitMQ,以避免在C:\Windows下创建文件.erlang.cookie
我将RabbitMQ服务设置为以用户“管理员”身份登录,这样它就不会在C:\Windows下创建文件,而只在C:\user\Administrator下创建文件。
结果:服务启动时,文件“.erlang.cookie”仅在C:\User\Administrator下创建。
当我键入命令“rabbitmqctl status”时,我得到与provious案例中相同的错误(badarith…)
现在的问题是:我没有找到有关此错误的任何信息(badarith)。
有谁能给我一个关于如何排除/避免这种情况的建议吗?关于rabbitmq服务正在运行的“第二个场景”?如果在配置集群时移动了eralang.cookie文件,则可能会出现一些问题。尝试删除mnesia DB,然后重新加入群集节点。如果删除mnesia db,请小心,否则会丢失所有数据。您好,谢谢您的回答。我使用虚拟机:对于每个测试,我都从一个干净的环境开始。如果我丢失数据没有问题。所以在第二种情况下,我没有集群:我无法创建它。我在一台服务器上操作。情况是:1)在干净的服务器上重新安装RabbitMQ 2)启动RabbitMQ服务3)将cookie从C:\Windows复制到C:\Users\Administrator 4)等。我还尝试了:1)从C:\Users\Administrator复制到C:\Windows 2)编辑并保存具有相同内容的两个cookie 3)。。。顺便说一下:我真的很好奇“badarith”的错误。嗨,GADV,只是一个OT。。。。我注意到您使用的是Windows NT。你读过这个吗。它应该可以在Windows NT和Windows 2000上运行,尽管这还没有经过测试。嗨,Gas,谢谢你的回答。Windows 8是Windows NT系列操作系统的一部分;“WindowsNT6.2”只是它的“真名”。因此,我使用的是Windows 8而不是Windows NT。正如@Legocia指出的,错误是因为rabbit_vm:bytes使用错误的参数调用
*
。现在,当使用错误的参数调用mnesia:table_info(Tab,memory)时,它将返回0
,例如不存在的表名:,这使得erlang:system_info(wordsize)
成为罪魁祸首