zoukankan      html  css  js  c++  java
  • 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
    


  • 相关阅读:
    模块化、结构化的代码,何尝不是在讲人生
    DOS操作文件或文件夹
    OSQL
    DOS 命令大全
    Red Tea
    SetInterval_1
    SetInterval
    分库分表——Sharding-Sphere
    线上redis热key问题
    线上redis bgsave导致服务响应延迟
  • 原文地址:https://www.cnblogs.com/Howlet/p/15390038.html
Copyright © 2011-2022 走看看