远程目标为嵌入式系统时如何在IEx中使用:observer工具?
问题根因
你通过--remsh参数连接后进入的是远程节点的shell,此时执行:observer.start()会在远程嵌入式BEAM节点上启动observer进程,该进程会调用远程环境的wx组件依赖,而你的嵌入式系统没有搭载相关图形库和运行环境,所以才会触发找不到wxe_driver.so的报错,该报错和版本兼容性无关,属于启动observer的节点选择错误。
解决方案
observer原生支持本地启动后关联监控远程节点,不需要远程节点具备任何图形相关依赖,操作步骤如下:
- 主机侧不使用
--remsh参数,直接启动本地IEx节点,节点cookie和远程节点保持一致:iex --sname bar --cookie <替换为实际cookie值> - 在本地打开的IEx shell中执行observer启动命令,此时调用的是你Ubuntu主机上的wx组件,不会触发报错:
:observer.start() - 待observer的GUI窗口弹出后,点击左上角
Nodes菜单,选择Connect Node选项,输入远程节点的完整标识foo@<替换为远程机器的主机名/IP>,确认后即可在本地observer中查看远程嵌入式节点的所有运行数据,包括进程状态、内存占用、应用监控、系统资源等全量功能都可正常使用。
补充优化建议
- 如果出现节点连接失败的问题,优先排查两端网络是否互通、主机名是否可正常解析,为避免解析问题,也可以在启动远程节点时直接用IP作为节点host后缀:
iex --name foo@<远程设备实际IP> --cookie <cookie> -S mix run
连接时直接填写带IP的节点名即可。 - 你已经保持了两端Elixir和OTP版本完全一致,满足Erlang分布式节点通信的核心要求,不需要对嵌入式侧系统做任何额外修改,也不会占用嵌入式端的额外资源。
内容的提问来源于stack exchange,提问作者nes0
相关产品推荐
相关产品推荐

