背景
我有一台生产中的机器正在运行一个elixir应用程序(不能访问iex,只能访问erl),我的任务是分析为什么我们要消耗这么多CPU。这里的想法是启动Observer,检查processes选项卡并查看具有最多缩减的流程。
我怎么连接?
要进行连接,我将从博客中学习以下教程:
其说明如下:
-
使用cookie和名称在生产计算机中启动应用程序
-
从本地运行:
ssh user@public_ip "epmd -names"
获取应用程序的名称和使用的端口
-
从本地创建到远程计算机的ssh隧道:
ssh -L 4369:user@public_ip:4369 -L 42877:user@public_ip:42877 user@public_ip
(4369默认为EPMD端口,42877为应用程序端口)
-
使用节点名称从本地连接到远程计算机:
erl -name "user@app_name" -setcookie "mah_cookie" -hidden -run observer
问题
从理论上讲,我应该可以在机器上使用观察者。然而,我收到的却是以下错误:
协议__inet_tcp_:注册/监听错误:epmd_close
所以,在浏览了互联网的阴暗面之后,我决定使用
sudo journalctl -f
要检查机器的所有日志,我发现了:
channel 3: open failed: administratively prohibited: open failed
my_app_name sshd[8917]: error: connect_to flame@99.999.99.999: unknown host (Name or service not known)
/scripts/watchdog.sh")
my_app_name CRON[9985]: pam_unix(cron:session): session closed for user flame
哪里:
-
二郎
-name
MyAppAppNd
-
机器用户:火焰
-
机器公共IP:99.999.99.999(显然不是真实的)
所以它告诉我,未知的主人??我很困惑,因为99.999.99.999是机器本身的公共IP!
问题
-
我做错什么了?
-
我读到在旧版本的Erlang中,如果一台机器在不同的网络中,我就不能用观察器监视它(事实上,因为我想从本地主机监视这台机器),但在现代,我没有找到任何与此相关的信息。
-
如果这实际上是不可能的,我还有什么选择呢?