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...