起步java的shell脚本
启动java的shell脚本
一个netty tcp长连接的项目中用到的启动脚本,以及jvm一些参数的设置,记录下来以后应该还用得到
一个netty tcp长连接的项目中用到的启动脚本,以及jvm一些参数的设置,记录下来以后应该还用得到
#!/bin/bash # JDK所在路径 JAVA_HOME="/opt/java" # 需要启动的Java主程序(main方法类) APP_MAINCLASS="ServerBootStrap" # 拼凑完整的classpath参数,包括指定lib目录下所有的jar CLASSPATH="." for i in ../lib/*.jar; do CLASSPATH="$CLASSPATH":"$i" done # 执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号 RUNNING_USER=root # java虚拟机启动参数 # ======================================================================= # -XX:+<option> 开启option参数 # -XX:-<option> 关闭option参数 # -XX:<option>=<value> 将option参数的值设置为value # ======================================================================= # -Duser.timezone=GMT+08 | 东八区 # -Xms6144m -Xmx6144m | 堆内存设置为6G,并禁止扩展 # -Xmn1536m | 堆内存(6G)中的1.5G分配给新生代,新生代太大会影响full 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=0 checkpid() { javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS` if [ -n "$javaps" ]; then psid=`echo $javaps | awk '{print $1}'` else psid=0 fi } start() { checkpid if [ $psid -ne 0 ]; then echo "================================" echo "warn: $APP_MAINCLASS already started! (pid=$psid)" echo "================================" else echo -n "Starting $APP_MAINCLASS ..." nohup java $JAVA_OPTS -classpath $CLASSPATH "com.XXX.$APP_MAINCLASS" >>../nohup.out 2>&1 & checkpid if [ $psid -ne 0 ]; then echo "(pid=$psid) [OK]" else echo "[Failed]" fi fi } 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 } case $1 in start) echo "start project......" start ;; stop) echo "stop project......" stop ;; restart) echo "restart project......" stop start ;; *) esac exit 0