java 啓動JAR包腳本 JVM參數筆記

java 啓動JAR包腳本 JVM參數筆記DEMO

/opt/java/jdk1.8.0_131/bin/java 

#運行模式
-server 														

#堆區內存可被分配的最大上限 
-Xmx512m  				

#堆區內存初始內存分配的大小 
-Xms512m  														

#新生代(Eden + 2*S)與老年代(不包括永久區)的比值
-XX:NewRatio=4 								

#Eden區和Survivor區的比值
-XX:SurvivorRatio=8 											

#持久代空間大小
-XX:PermSize=48m

#持久代空間大小
-XX:MaxPermSize=64m 											

#每個線程的堆棧大小
-Xss256k		

#JDK5.0以後每個線程堆棧大小爲1M,以前每個線程堆棧大小爲256K.更具應用的線程所需內存大小進行 調整.在相同物理內存下,減小這個值能生成更多的線程.但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右
一般小的應用, 如果棧不是很深, 應該是128k夠用的 大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。(校長)
和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"”
-Xss is translated in a VM flag named ThreadStackSize”
一般設置這個值就可以了
-XX:ThreadStackSize=128k 										

-XX:-ReduceInitialCardMarks 

#垃圾回收統計信息
-XX:+PrintGCDetails  											

#垃圾回收統計信息
-XX:+PrintGCTimeStamps 		

#垃圾回收統計信息
-XX:+PrintHeapAtGC 

-Xloggc:/home/workspace/jvm-log/open-api-global-quartz-GC.log 

#關閉System.gc() 這個參數需要嚴格的測試
-XX:+DisableExplicitGC											

#使用CMS內存收集
-XX:+UseConcMarkSweepGC 

-XX:+CMSClassUnloadingEnabled 

#CMS併發過程運行時的線程數
-XX:ParallelCMSThreads=4 

#CMS降低標記停頓
-XX:+CMSParallelRemarkEnabled 									

#在FULL GC的時候, 對年老代的壓縮 CMS是不會移動內存的, 因此, 這個非常容易產生碎片, 導致內存不夠用, 因此, 內存的壓縮這個時候就會被啓用。 增加這個參數是個好習慣。
可能會影響性能,但是可以消除碎片
-XX:+UseCMSCompactAtFullCollection 								

#CMS作爲垃圾回收使用50%後開始CMS收集
-XX:CMSInitiatingOccupancyFraction=50 							

#CMS併發收集器不對內存空間進行壓縮,整理,所以運行一段時間以後會產生"碎片",使得運行效率降低.此值設置運行多少次GC以後對內存空間進行壓縮,整理.
-XX:CMSFullGCsBeforeCompaction=2 								

#這個可以壓縮指針,起到節約內存佔用的新參數
-XX:+UseCompressedOops 

#當堆內存空間溢出時輸出堆的內存快照
-XX:+HeapDumpOnOutOfMemoryError 

-XX:HeapDumpPath=/home/workspace/jvm_dump/open-api-global-quartz-heapDump.hprof 

-jar open-api-global-quartz-exec.jar 

--eureka.server=http://localhost:8761/eureka 
--environment=Staging --dataCenter=Cloud

demo open-api-devops-service.sh

#!/bin/bash
export JAVA_HOME=$JAVA_HOME
echo ${JAVA_HOME}

APP=open-api-devops-service
APP_JAR=${APP}"-exec.jar"
ENV_SPRING_ACTIVE="--spring.profiles.active=dev"

LOG_DIR=$PWD/start-log
JVM_LOG_DIR=$PWD/jvm-log
JVM_DUMP_DIR=$PWD/jvm-dump

command=$1

# 啓動
function start(){
  # 日誌文件是否存在 不存創建
  if [ ! -d "${LOG_DIR}" ];then
    mkdir "${LOG_DIR}"
  fi
  if [ ! -d "${JVM_LOG_DIR}" ];then
    mkdir "${JVM_LOG_DIR}"
  fi
  if [ ! -d "${JVM_DUMP_DIR}" ];then
    mkdir "${JVM_DUMP_DIR}"
  fi
  rm -f $APP.pid
  #${JAVA_HOME}/bin/jar uvf $APP_JAR jdbc.properties
  nohup ${JAVA_HOME}/bin/java -server -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:PermSize=48 -XX:MaxPermSize=64m -Xss256k -XX:ThreadStackSize=128k -XX:-ReduceInitialCardMarks -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:$JVM_LOG_DIR/$APP-GC.log -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:ParallelCMSThreads=4 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSFullGCsBeforeCompaction=2 -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$JVM_DUMP_DIR/$APP-heapDump.hprof -jar $APP_JAR $ENV_SPRING_ACTIVE >> /dev/null 2>$APP-error.log &
  echo $! > $APP.pid
  check
}

# 停止
function stop(){
  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ];then
    echo "Stop Process"
    kill -15 $tpid
  fi

  sleep 5

  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ];then
    echo "Stop Process"
    kill -15 $tpid
  else
    echo "Stop SUCCESS"
  fi

  sleep 5

  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ];then
    echo "Stop FAILD"
  fi
}

# 檢查
function check(){
  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ]; then
    echo "APP is running"
  else
    echo "APP is Not running"
  fi
}

# 強制kill進程
function forcekill(){
  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ];then
    echo "Kill Process"
    kill -9 $tpid
  fi
}

# 輸出進程號
function showtpid(){
  tpid=`ps -ef | grep $APP_JAR | grep -v grep | grep -v kill | awk '{print $2}'`
  if [ ${tpid} ];then
    echo 'Process '$APP_JAR' tpid is '$tpid
  else
    echo 'Process '$APP_JAR' is not running.'
  fi
}

# 輸出進程號
function showtpid(){
    tpid=`ps -ef|grep $APP_JAR|grep -v grep|grep -v kill|awk '{print $2}'`
    if [ ${tpid} ]; then
        echo 'process '$APP_JAR' tpid is '$tpid
    else
        echo 'process '$APP_JAR' is not running.'
    fi
}

if [ "${command}" ==  "start" ]; then
    start

elif [ "${command}" ==  "stop" ]; then
     stop

elif [ "${command}" ==  "check" ]; then
     check

elif [ "${command}" ==  "status" ]; then
     check

elif [ "${command}" ==  "kill" ]; then
     forcekill

elif [ "${command}" == "tpid" ];then
     showtpid

else
    echo "Unknow argument....[start|stop|check|status|kill|tpid]"
fi
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章