放假回來什么都不想寫,加上最近在忙着看書,各種各樣的書,筆記就這樣落下了
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