看canal的時候看了下deploy的腳本,發現不少系統都大同小異java
若是是須要debug,就須要開啓調試端口app
if [ "$1" = "debug" ]; then DEBUG_PORT=$2 DEBUG_SUSPEND="n" JAVA_DEBUG_OPT="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$DEBUG_SUSPEND" fi
按照系統位數設置不一樣的jvm參數jvm
str=`file -L $JAVA | grep 64-bit` if [ -n "$str" ]; then JAVA_OPTS="-server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -XX:PermSize=96m -XX:MaxPermSize=256m -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError" else JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m " fi
啓動程序,1 是正確,正確則將日誌寫入log中,2表示不正確,則輸出,最後的&表示後臺執行socket
第二行表示將進程號打印到canal.pid文件中,以供關閉時kill該進程spa
$JAVA $JAVA_OPTS $JAVA_DEBUG_OPT $CANAL_OPTS -classpath .:$CLASSPATH com.alibaba.otter.canal.deployer.CanalLauncher 1>>$base/logs/canal/canal.log 2>&1 & echo $! > $base/bin/canal.pid
結束的程序,找到pid文件,kill進程debug
base=`dirname $0`/.. pidfile=$base/bin/canal.pid if [ ! -f "$pidfile" ];then echo "canal is not running. exists" exit fi pid=`cat $pidfile` if [ "$pid" == "" ] ; then pid=`get_pid "appName=otter-canal-example"` fi echo -e "`hostname`: stopping canal $pid ... " kill $pid