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