Java啟動參數和腳本


放假回來什么都不想寫,加上最近在忙着看書,各種各樣的書,筆記就這樣落下了


1. Java啟動參數

啟動語法:java [-options] -jar xxx.jar [args…]


Java的啟動參數有運行時參數JVM 參數,運行時參數就是 main 方法中的 args,而 JVM 參數是我們最常用的參數,下面就來說說 JVM 參數


JVM 參數分為三種:

  • 標准參數(-):相對穩定的參數,每個版本的 JVM 都可用

  • 非標X參數(-X):默認 JVM 實現參數的功能,但是不保證所有 JVM 都實現,不保證向后兼容

  • 非標XX參數(-XX):各個 JVM 實現會有所不同,將來可能會隨時取消


1.1 常見標准參數

  • -cp(類搜索路徑):添加后將不再使用 CLASSPATH 中的類搜索路徑
  • -DKey=Value(自定義參數):預定義的參數(非-D開頭)是有限的,推出了自定義參數,若值有空格用引號包括


1.2 常用X參數

  • -Xms:堆初始大小(默認為物理內存的1/64)

  • -Xmx:堆最大值(默認為物理內存的1/4或者1G)

  • -Xss:線程棧的大小(一般默認為512k)

  • -Xmn:年輕代的初始值及最大值(可用 -XX:NewSize 和 -XX:MaxNewSiz 來分別設置)



1.3 常用XX參數

-XX:+PrintHeapAtGC

-XX:+PrintGCDetails

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=logs/heapdump.hprof(發生OOM時,dump出快照到文件heapdump.hprof)

-XX:ErrorFile=logs/java_error%p.log( JVM 錯誤時把日志輸出到java_error%p.log中)



1.4 自定義參數

同事寫了個功能,然后在項目啟動的時候確定是否使用這個功能,挺有趣的(但好像寫在配置文件里更方便)

// 加入自定義啟動參數
JAVA_OPTS="-DmyArgs.enable=true -Xmx512M -Xms512M ...."
    
// 獲取自定義啟動參數
    if(System.getProperty("myArgs.enable")) {
    // 啟動該功能
}






2. 啟停腳本

項目打包后在測試環境的啟停都是個體力活,剛好又給筆者遇到了,綜合別人的腳本記錄了一下


2.1 判斷 Java 進程是否存在

APP_NAME=xxx.jar
pid=jps -l | grep $APP_NAME

if [ -z $pid ]; then
 	echo "$APP_NAME started"
 else
 	echo "$APP_NAME stoped"
 fi
 
# 普通進程的
# pid=ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'


2.2 啟停腳本

APP_NAME=xxxx-1.0-SNAPSHOT.jar

pid=0
checkpid() {
    javaps=`jps -l | grep $APP_NAME`
    if [ -n "$javaps" ]; then
    	pid=`echo $javaps | awk '{print $1}'`
    else
    	pid=0
}

start() {
    checkpid
    if [ $psid -ne 0 ]; then
    	echo "$APP_NAME already started"
    else
    	echo "Starting $APP_NAME ..."
    	`nohup java -jar $APP_NAME > $APP_NAME'.out' 2>&1 &`
    	checkpid
    	if [ $pid -ne 0]; then
    		echo "$APP_NAME start success"
    	else
    		echo "$APP_NAME start faild"
    	fi
    fi
}

stop() {
    checkpid
    if [ $pid -ne 0 ]; then
    	echo "Stoping $APP_NAME..."
        kill -9 $pid
        if [$? -eq 0 ]; then
        	echo "$APP_NAME stop success"
        else
        	echo "$APP_NAME stop faild"
       	fi
    else
    	echo "$APP_NAME already stoped"
   	fi
}


case "$1" in
 'start')
 start
 ;;
 'stop')
 stop
 ;;
 'restart')
 stop
 start
 ;;
 *)	# 其他任何情況
 
echo "help: $0 {start|stop|restart}"
echo "例子: ./deploy start
exit 1
esac
exit 0



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM