Javaのshellスクリプトの起動


netty tcp長接続のプロジェクトで使用される起動スクリプト(スクリプトがオリジナルではなく、ネット上でコピーしてコピーしたもの、出典が分からない)、jvmのいくつかのパラメータの設定は、記録してからも使用されるはずです.
#!/bin/bash

# JDK    
JAVA_HOME="/opt/java"

#      Java   (main   )
APP_MAINCLASS="XXX"

#      classpath  ,    lib      jar
CLASSPATH="."
for i in ../lib/*.jar; do
	CLASSPATH="$CLASSPATH":"$i"
done

# java       
# =======================================================================
# -XX:+<option>   option  
# -XX:-<option>   option  
# -XX:<option>=<value>  option       value
# =======================================================================
# -Duser.timezone=GMT+08 |    
# -Xms6144m -Xmx6144m |       6G,     
# -Xmn1536m |    (6G)  1.5G      ,        gc    ,  netty tcp          
# -XX:PermSize=288m -XX:MaxPermSize=288m |       288m
#           (   size =    size +    size +    size)
# -XX:UseConcMarkSweepGC |   ParNew + CMS + Serial Old            。  CMS  Concurrent Mode Failure, Serial Old    
# -XX:+CMSClassUnloadingEnabled |   UseConcMarkSweepGC   jdk1.6        (PermGen) GC
# -XX:MaxTenuringThreshold |            ,          Minor GC    +1
# -Xloggc:/opt/gc.log
# -XX:+PrintGCDetails |   GC    
# -XX:+PrintGCTimeStamps |   GC    
# -XX:+HeapDumpOnOutOfMemoryError |                  
# -XX:HeapDumpPath=/opt/dump/ |           
JAVA_OPTS="-Duser.timezone=GMT+08 -Xms6144m -Xmx6144m -Xmn1536m -XX:PermSize=288m -XX:MaxPermSize=288m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=15 -Xloggc:/opt/gc.log  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump/"

#    psid  (  )
psid=0

###################################
# (  )         
#
#   :
#   JDK   JPS   grep    ,    pid
# jps   l   ,    java      
#   awk,   pid ($1  ), Java    ($2  )
###################################
checkpid() {
	javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
	if [ -n "$javaps" ]; then
		psid=`echo $javaps | awk '{print $1}'`
	else
		psid=0
	fi
}

###################################
# (  )    
#
#   :
# 1.    checkpid  ,  $psid    
# 2.        ($psid   0),        
# 3.         ,        
# 4.       ,    checkpid  
# 5.    4          pid,   [OK],    [Failed]
#   :echo -n        ,   
#   :"nohup     >/dev/null 2>&1 &"    
###################################
start() {
	checkpid
	if [ $psid -ne 0 ]; then
		echo "================================"
		echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
		echo "================================"
	else
		echo -n "Starting $APP_MAINCLASS ..."
#log.log   ,        
		nohup java $JAVA_OPTS -classpath $CLASSPATH "com.futurefleet.framework.bootstrap.main" > /data/software/log.log
		checkpid
		if [ $psid -ne 0 ]; then
			echo "(pid=$psid) [OK]"
		else
			echo "[Failed]"
		fi
	fi
}

###################################
#(  )    
#
#  :
# 1.    checkpid  ,  $psid    
# 2.        ($psid   0),       ,  ,       
# 3.  kill -9 pid          
# 4.  kill       ,             : $?
# 5.    4   $?  0,   [OK],    [Failed]
# 6.    java       ,          ,       (    stop)。
#  :echo -n        ,   
#  : shell   ,"$?"                  
###################################
stop() {
	checkpid
	if [ $psid -ne 0 ]; then
		echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
		kill -9 $psid
		if [ $? -eq 0 ]; then
			echo "[OK]"
		else
			echo "[Failed]"
		fi

		checkpid
		if [ $psid -ne 0 ]; then
			stop
		fi
	else
		echo "================================"
		echo "warn: $APP_MAINCLASS is not running"
		echo "================================"
	fi
}

###################################
#(  )     
#
#  :
# 1.    checkpid  ,  $psid    
# 2.        ($psid   0),     jmap,  ,       
#  :echo -n        ,   
#  : shell   ,"$?"                  
###################################
dump() {
	checkpid
	if [ $psid -ne 0 ]; then
		echo -n "Dumping $APP_MAINCLASS ...(pid=$psid) "
		jmap -dump:live,format=b,file=heep.bin $psid
	else
		echo "================================"
		echo "warn: $APP_MAINCLASS is not running"
		echo "================================"
	fi
}

###################################
#          ($1),    
###################################
case $1 in
start)
	echo "start project......"
	start
	;;
stop)
	echo "stop project......"
	stop
	;;
restart)
	echo "restart project......"
	stop
	start
	;;
dump)
	echo "dump project......"
	dump
	;;
*)
esac
exit 0