<p dir="ltr">Could the 'gateway' node close its open sockets before shutting down?</p>
<p dir="ltr">Maybe pause for a second after pinging an exit signal to the gateway node, stopping the apps but before calling erlang:halt()?</p>
<div class="gmail_quote">On 12 Nov 2014 17:14, "adam chan" <<a href="mailto:114999420@qq.com">114999420@qq.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hi List,</div><div><br></div><div>I have a problem to stop or exit a erlang node.<span style="line-height:0px"></span></div><div>When I called erlang:halt(), the node is fake dead, and the cpu goes up to 100%.</div><div><br></div><div>Here is the situation:</div><div>I'm running OTP_R15B02 on Centos 6.3.<span style="line-height:0px"></span></div><div><br></div><div>I have 3 nodes named 'server', 'unite' and 'gateway' which connected to each other.</div><div>The 'gateway' node listens to a port , receives socket datas from client, and then transfers to 'server' and 'unite'. </div><div>The response data from 'server' and 'unite' will send back to client through 'gateway' node too.</div><div> </div><div>When I want to stop all these 3 nodes, the 'gateway' node CAN NOT exit completely sometimes <span style="line-height:1.5">(small probability</span><span style="line-height:1.5">) <span style="line-height:0px"></span></span><span style="line-height:1.5">.</span></div><div>The nodes is running in screen of linux, the starting scripts like this:</div><div><br></div><div><b>[start_all.sh]</b></div><div>...</div><div>/usr/bin/screen -dmS server -s $ScriptPath/start_server.sh $Log<span style="line-height:0px"></span><span style="line-height:0px"></span></div><div>...</div><div>/usr/bin/screen -dmS unite -s $ScriptPath/start_unite.sh $Log<span style="line-height:0px"></span></div><div>...</div><div>/usr/bin/screen -dmS gateway -s $ScriptPath/start_gateway.sh $Log<span style="line-height:0px"></span></div><div><br></div><div><b>[start_gateway.sh]</b></div><div><div>#!/bin/bash</div><div>cd /data/web/server/server/config</div><div>ulimit -s 262140</div><div>erl -kernel inet_dist_listen_min 40001 -kernel inet_dist_listen_max 40100 +P 1024000 +K true -smp disable -name <a href="mailto:gateway@192.168.7.100" target="_blank">gateway@192.168.7.100</a> -setcookie abc -boot start_sasl -config gs_main -pa ../ebin -s gs_main start -extra 192.168.7.100<span style="line-height:0px"></span> 9001 2</div></div><div><br></div><div><br></div><div>I stop the nodes in the order of 'gateway' -> 'unite' -> 'server'</div><div>The stop scripts like this:</div><div><b>[stop_all.sh]</b></div><div><div>#!/bin/bash</div><div>cd /data/web/server/server/scripts/</div><div>chmod +x stop_gateway.sh</div><div>chmod +x stop_unite.sh</div><div>chmod +x stop_server.sh</div><div>./stop_gateway.sh</div><div>./stop_unite.sh</div><div>./stop_server.sh<span style="line-height:0px"></span></div></div><div><br></div><div><b>[stop_gateway.sh]</b></div><div><div>#!/bin/bash</div><div>cd /data/web/server/server/config</div><div>erl -noshell -hidden -name <a href="mailto:stop_gateway@192.168.7.100" target="_blank">stop_gateway@192.168.7.100</a> -setcookie abc -pa ../ebin -eval "rpc:call('<a href="mailto:gateway@192.168.7.100" target="_blank">gateway@192.168.7.100</a>', gs_main, stop, [])." -s c q<span style="line-height:0px"></span></div></div><div><br></div><div><b>[gs_main.erl]</b></div><div>-define(SERVER_APPS, [sasl, gs_main]).<span style="line-height:0px"></span></div><div>...</div><div><div>stop() -></div><div>    ok = stop_applications(?SERVER_APPS),</div><div>    erlang:halt().<span style="line-height:0px"></span></div></div><div><br></div><div><br></div><div>The 'server' and 'unite' node can exit completely every time, and the screen which is running the node also exit too.</div><div>But the 'gateway' node sometimes (small probability<span style="line-height:0px"></span><span style="line-height:1.5">) can't exit, the screen remains too:</span></div><div><span style="line-height:1.5"><br></span></div><div><div style="line-height:1.5"><b>[root@localhost logs]# screen -ls</b></div><div style="line-height:1.5">There are screens on:</div><div style="line-height:1.5">        20107.gateway  (Detached)</div><div style="line-height:1.5"><br></div><div style="line-height:1.5"><div><b>[root@localhost logs]# ps -ef | grep gateway</b></div><div>root     20107     1  0 Nov10 ?        00:00:00 /usr/bin/SCREEN -dmS gateway -s /data/web/server/server/scripts/start_gateway.sh -L -c /data/web/server/server/var/logs/screenrc_gateway</div><div>root     20110 20107  0 Nov10 pts/7    00:00:00 /bin/bash /data/web/server/server/scripts/start_gateway.sh</div><div>root     20111 20110 90 Nov10 pts/7    1-19:56:53 /usr/local/lib/erlang/erts-5.9.2/bin/beam -P 1024000 -K true -- -root /usr/local/lib/erlang -progname erl -- -home /root -- -kernel inet_dist_listen_min 40001 -kernel inet_dist_listen_max 40100 -smp disable -name <a href="mailto:gateway@192.168.7.100" target="_blank">gateway@192.168.7.100</a> -setcookie abc -boot start_sasl -config gs_main -pa ../ebin -s gs_main start -extra 192.168.7.100 9001 2<span style="line-height:0px"></span></div></div><div style="line-height:1.5"><br></div><div style="line-height:1.5"><div><b>[root@localhost logs]# strace -c -p 20111</b></div><div>Process 20111 attached - interrupt to quit</div><div>^CProcess 20111 detached<span style="line-height:0px"></span></div></div><div style="line-height:1.5"><br></div><div style="line-height:1.5">strace command has no effect here. And one CPU core keeps running at 100%.</div><div style="line-height:1.5">At the end of the 'gateway' node's log, it says the application is exited:</div><div style="line-height:1.5"><b>[gateway.log]</b></div><div style="line-height:1.5"><div>=INFO REPORT==== 11-Nov-2014::10:21:18 ===</div><div>    application: gs_main</div><div>    exited: stopped</div><div>    type: temporary<span style="line-height:0px"></span></div></div><div style="line-height:1.5"><br></div><div><span style="line-height:1.5">It seems that some endless loop occured after the printing of the =INFO REPORT=.</span></div></div><div><span style="line-height:1.5">The application is not really exited, or the 'ps -ef | grep gateway' command won't find the 20111 process.</span></div><div><br></div><div>Any ideas?</div><div>Thanks in advance.</div><div><br></div><div><div style="color:#909090;font-family:Arial Narrow;font-size:12px">------------------</div><div style="font-size:14px;font-family:Verdana;color:#000"><div>Adam Chan<br></div>
<div></div></div></div><div> </div><br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div>