1、创建文件 run.sh

#!/bin/bash

#这里可替换为你自己的执行程序,其他代码无需更改

#APP_NAME=/opt/server/sys/jh-sys-web-1.0-SNAPSHOT.jar 
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh msp_api.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    echo "开始启动..."
#    nohup java -jar ${APP_NAME}  >/dev/null 2>&1 & 
    echo "运行命令"  ${java}  
    echo "执行jar参数为" ${params}
    echo "运行jar为" ${APP_NAME}
    nohup ${java} -Xms256m -Xmx256m -Xss128m -jar ${APP_NAME}  ${params} >/dev/null 2>&1 &
    echo "启动结束"
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi  
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  sleep 5
  start
}
source /etc/profile
# 运行java命令
java=$( echo $(type java) | awk '{print $3}')
APP_NAME=$(pwd)/
# 当前目类jar全路径
APP_NAME+=$(ls | grep jar)
# jar 运行的参数
params=$2
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

注意:GVM参数注释

-Xms 堆内存的最小大小,默认为物理内存的1/64

-Xmx 堆内存的最大大小,默认为物理内存的1/4

-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn

-Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。

除了这些配置,JVM还有非常多的配置,常用的如下:

  1. 堆设置
    • -Xms:初始堆大小
    • -Xmx:最大堆大小
    • -Xmn:新生代大小
    • -XX:NewRatio:设置新生代和老年代的比值。如:为3,表示年轻代与老年代比值为1:3
    • -XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5  
    • -XX:MaxTenuringThreshold:设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代
    • -XX:PermSize-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)
    • -XX:MetaspaceSize-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)
  2. 收集器设置
    • -XX:+UseSerialGC:设置串行收集器
    • -XX:+UseParallelGC:设置并行收集器
    • -XX:+UseParalledlOldGC:设置并行老年代收集器
    • -XX:+UseConcMarkSweepGC:设置并发收集器
  3. 垃圾回收统计信息
    • -XX:+PrintGC
    • -XX:+PrintGCDetails
    • -XX:+PrintGCTimeStamps
    • -Xloggc:filename
  4. 并行收集器设置
    • -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
    • -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
    • -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
  5. 并发收集器设置
    • -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
    • -XX:ParallelGCThreads=n:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。

 2、赋给run.sh 可执行权限
 

 chmod a+x run.sh

 

 3、注意 
 将可以运行的jar拷贝到与run.sh同一级目录,只可以有一个jar

 4、运行

 run.sh start "--server.port=8080"   #启动 jar
 run.sh restart "--server.port=8080" #重启 jar
 run.sh stop # 停止 jar

 

最后修改于 2020-01-03 16:55:28
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇