erlang jcl遠端除錯 rabbitmq

2021-07-10 00:26:08 字數 2811 閱讀 9365

job control mode (jcl), in which jobs can be started, stopped, detached or connected. only the current job can communicate with the shell.

通過jcl,我們可以遠端接入乙個erlang node,來對其進行訪問控制

erlang節點之間通訊是需要有互信的,而互信是用cookie來完成,所以要對其他節點進行訪問我們需要獲得對方cookie

首先我們有乙個這樣的執行的erlang 節點rabbit@mainred-thinkpad-e420,ps 查程序時未發現其使用set_cookie,則可以借助rabbitmqctl eval 「erlang:get_cookie().」來獲取,由於顯示設定,所以結果是乙個隨機值。

mainred@mainred-thinkpad-e420:~$ sudo ps -ef grep rab

rabbitmq 1598 1558 0 06:19 ? 00:00:22 /usr/lib/erlang/erts-5.10.4/bin/beam.smp -w w -k true -a30 -p 1048576 – -root /usr/lib/erlang -progname erl – -home /var/lib/rabbitmq – -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.2.4/sbin/../ebin -noshell -noinput -s rabbit boot -sname rabbit@mainred-thinkpad-e420 -boot start_sasl -kernel inet_default_connect_options -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger -rabbit sasl_error_logger -rabbit enabled_plugins_file 「/etc/rabbitmq/enabled_plugins」 -rabbit plugins_dir 「/usr/lib/rabbitmq/lib/rabbitmq_server-3.2.4/sbin/../plugins」 -rabbit plugins_expand_dir 「/var/lib/rabbitmq/mnesia/rabbit@mainred-thinkpad-e420-plugins-expand」 -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir 「/var/lib/rabbitmq/mnesia/rabbit@mainred-thinkpad-e420」

mainred@mainred-thinkpad-e420:~$ sudo rabbitmqctl eval 「erlang:get_cookie().」

『gekqfelmyvcurlsdqcyi』

…done.

然後啟動乙個erlang節點,設定cookie,嘗試ping下要連線的節點

mainred@mainred-thinkpad-e420:~$ erl -sname test@mainred-thinkpad-e420

erlang r16b03 (erts-5.10.4) [source] [smp:4:4] [async-threads:10] [kernel-poll:false]

eshell v5.10.4 (abort with ^g)

(test@mainred-thinkpad-e420)1> erlang:set_cookie(node(),gekqfelmyvcurlsdqcyi).

* 1: variable 『gekqfelmyvcurlsdqcyi』 is unbound

(test@mainred-thinkpad-e420)2> erlang:set_cookie(node(),』gekqfelmyvcurlsdqcyi』).

true

(test@mainred-thinkpad-e420)3> net_adm:ping(『rabbit@mainred-thinkpad-e420』).

pong

接入某節點有我了解的兩種方式,乙個是使用net_kernel:connect_node(nodename),另乙個是使用jcl的r命令,此處我們使用後者

ctl+g進入 jcl模式

user switch command

–> h

c [nn] - connect to job

i [nn] - interrupt job

k [nn] - kill job

j - list all jobs

s [shell] - start local shell

r [node [shell]] - start remote shell

q - quit erlang

? h - this message

–> r 『rabbit@mainred-thinkpad-e420』 %%l連線rabbit@mainred-thinkpad-e420

–> j %%job列表中可以看到有我們連線的節點

1 2*

–> c 2 %%切換到job 2,這樣就成功接入了rabbit@mainred-thinkpad-e420

eshell v5.10.4 (abort with ^g)

(rabbit@mainred-thinkpad-e420)1>

之後我們就可以查詢程序呼叫棧,記憶體使用情況,長期等待訊息程序來進行除錯。

* 

*

idea 遠端除錯 IDEA遠端除錯

大部分測試環環境和本地環境有區別,在本地上也很難搭建起一套完整的服務,所以導致了在本地可以發布到伺服器上卻出現各種問題,這時候我們就可以借助遠端除錯來幫助我們快速的定位問題的所在。遠端除錯需要在伺服器上部署與本地一致的 xdebug xrunjdwp transport dt socket,serv...

遠端掛載和遠端除錯

遠端掛載 1 修改ip為同一網段 ifconfig eth0 ip 2 mount t nfs o nolock,intr,rsize 1024,wsize 1024,proto tcp host ip nfs mnt 遠端除錯 主機端 1 arm arago linux gnueabi gdb x...

GDB遠端除錯

3.建立配置檔案 編譯 gdb允許把編譯配置和編譯結果放到任意的目錄,因此可以在gdb目錄之外建立乙個專門存放編譯結果的目錄。cd opt mkdir p arm gdb build cd arm gdb build opt gdb 6.6 configure target arm linux pr...