Java -jar参数详解:掌握Java可执行JAR文件的运行技巧

devtools/2024/9/23 10:18:56/

作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。

 

一、简介


java -jar命令用于运行可执行的JAR文件。它会自动查找JAR文件中的清单文件(MANIFEST.MF),并根据清单文件中的Main-Class属性指定的主类来启动应用程序。

 

 

二、常用参数详解


以下是一些常用的java -jar命令的参数,让我们逐一了解它们的功能和用法。

      containers:
        - env:
            - name: PARAMS
              value: -jar  /opt/app.jar --spring.profiles.active=test12 --spring.cloud.consul.host=192.168.12.121  --spring.cloud.consul.port=32000 --spring.cloud.consul.discovery.acl-token=8dc1eb67-1f5f-4e10-ad9d-5e58b047647c 
            - name: JAVA_OPTS
              value: '-Xmx1024m -Xms1024m'
        image: reg.hrfax.cn/zjboc-eshare/5201-datafusion:6bf93625

 

  • -Xmx:指定Java堆的最大内存大小。例如-Xmx512m表示将最大堆内存设置为512MB。通过调整堆内存大小,可以优化应用程序的性能和内存使用情况。
  • -Xms:指定Java堆的初始内存大小。例如,-Xms256m表示将初始堆内存设置为256MB。这个参数可以帮助您在启动应用程序时控制初始内存分配的大小。
  • -Xss:指定线程栈的大小。例如,-Xss1m表示将线程栈大小设置为1MB。线程栈用于存储线程的局部变量和方法调用信息。通过调整线程栈的大小,可以控制应用程序的并发性能和内存使用情况。
  • -XX:MetaspaceSize=256m参数,您可以指定元空间的初始大小为256MB。这意味着在应用程序启动时,虚拟机会预分配256MB的内存用于存储类的元数据。
  • -XX:MaxMetaspaceSize=:指定元空间的最大大小。元空间用于存储类的元数据信息。例如,-XX:MaxMetaspaceSize=256m表示将元空间的最大大小设置为256MB。适当设置元空间的大小可以避免类加载和元数据溢出的问题。
  • -D=:设置系统属性。例如,-Djava.library.path=/path/to/libs设置java.library.path系统属性为/path/to/libs。您可以使用这个参数来配置应用程序的一些属性,例如文件路径、日志级别等。
  • -verbose:class:打印类加载信息。使用这个参数可以了解应用程序在运行过程中加载的类的详细信息,包括类的名称、来源等。
  • -verbose:gc:打印垃圾回收信息。通过使用这个参数,您可以了解应用程序的垃圾回收情况,包括垃圾回收器的使用情况、回收的对象数量等。
  • -Dfile.encoding=:设置默认的文件编码。例如,-Dfile.encoding=UTF-8表示使用UTF-8编码来读取和写入文件。正确设置文件编码可以确保应用程序能够正确处理不同字符集的文本数据。

以上是一些常用的java -jar命令的参数,通过灵活运用这些参数,您可以对应用程序的性能、内存使用和系统属性进行优化和配置。

 

 

三、示例使用


示例1: 前台启动

java -jar -Xms4096m -Xmx4096m  -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m /opt/myapp/myapp.jar

在上述示例中,我们同时使用了多个参数。-Xms4096m设置最大堆内存为4096MB,-Xmx4096m设置初始堆内存为4096MB,-XX:MetaspaceSize=256m 将元空间的初始大小设置为256MB,-XX:MaxMetaspaceSize=256m 将元空间的最大大小设置为256MB,最后通过-jar选项指定要运行的JAR文件为myapp.jar

示例2: 后台启动,并输出日志到nohub.out

nohup /usr/local/java/jdk1.8.0_333/bin/java -jar -Xms8192m -Xmx8192m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC /home/myapp/myapp.jar --server.port=8000  > nohup.out 2>&1 &

 

 

四、启动脚本


一般情况了,我们会在jar包的同级目录下创建一个start.sh的启动脚本来启动我们的服务
**示例1:**启动脚本

#!/bin/sh
nohup /usr/local/java/jdk1.8.0_102/bin/java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m   /home/myapp/myapp.jar  > nohup.out 2>&1 &

 **示例2:**通用脚本

#!/bin/bash
# ##################################################################
# ### Service start script
# ################################################################### 方便查看日志,参数为 -f
PRG="$0"
P1=$1
#PRGDIR=`dirname "$PRG"`
PRGDIR=`pwd`# ### 启动成功提示!
function success () {echo "#####"echo "####################### Start Service End! #######################"echo ""echo -e "                    \033[32;1;5m [ START SUCCESSFULLY! ]\033[0m"echo ""
}# ### 启动失败提示警告!
function failed () {echo "#####"echo "####################### Start Service End! #######################"echo ""echo -e "                   \033[37;41;1;5m [ FAILED! FAILED! FAILED! ]\033[0m"echo -e "       \033[37;41;1;5m [ $1 ]\033[0m"echo ""
}echo "####################### Start Service ############################"
echo "#####"
echo "##### Current Working Path: $PWD"# ### Script running flag!
STATUS="OK!"JAVA_VERSION=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`
echo "##### Java Version : $JAVA_VERSION"# ### 判断jdk版本是否是1.8
JAVA_VERSION_P="1.8"
JAVA_PATH=""
if [[ $JAVA_VERSION =~ $JAVA_VERSION_P ]]
thenecho "##### The JDK is OK!"JAVA_PATH=`which java`
elseecho "##### The JDK is not supported!"
fi# ### 扫描/opt和/usr目录获取JAVA_PATH
reg='jdk1.8.0_[0-9]{1,3}/bin/java'
if [ "$JAVA_PATH" = "" ]; thenecho "##### Find JDK directory!"echo "##### '/opt' And '/usr' directory will be scanned."echo "##### Start scan '/opt' directory ... ..."JAVA_PATH_DIR=$(find /opt -name java 2>&1)for i in $JAVA_PATH_DIRdoif [[ $i =~ $reg ]]; thenecho "##### JDK_PATH : $i"echo "##### The JDK_PATH is OK!"JAVA_PATH=$ifidone
fiif [ "$JAVA_PATH" = "" ]; thenecho "##### '/opt' directory Not found the JDK!"echo "##### Start scan '/usr' directory ... ..."JAVA_PATH_DIR=$(find /usr -name java 2>&1)for i in $JAVA_PATH_DIRdoif [[ $i =~ $reg ]]; thenecho "##### JDK_PATH : $i"echo "##### The JDK_PATH is OK!"JAVA_PATH=$ifidone
fi
if [ "$JAVA_PATH" = "" ]; thenecho "##### '/usr' directory Not found the JDK!"msg="The JDK Not found, Please configure the JDK!"echo "##### $msg"failed "$msg"exit
fi# ### 获取jar文件,若多个jar文件,默认选择使用最新文件
echo "##### Get running jar file, if more than jar file, the default option is to use the latest file."
JarFileName=$(ls -lt $PRGDIR/*.jar 2>&1|awk '/^-/ {print $NF}'|sed -n '1p')
if [ -z "$JarFileName" ]; thenmsg="The jar file is not exist! Please confirm before implementation."echo "##### $msg"failed "$msg"exit
fiecho "##### Currently Running JarFileName: $JarFileName"# ### 设置JVM参数
CATALINA_OPTS="-Xms8192m -Xmx8192m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC"
RUN_COM="nohup $JAVA_PATH -jar $CATALINA_OPTS $JarFileName 2>&1"
echo "##### Run the command : $RUN_COM"
#nohup $JAVA_PATH -jar $CATALINA_OPTS $JarFileName > nohup.out 2>&1 &
setsid $JAVA_PATH -jar $CATALINA_OPTS $JarFileName > nohup.out 2>&1 &
# ### 将jar包启动对应的pid写入文件中,为停止时提供pidi
# echo $! > run.pidif [ $? -eq 0 ]; thensuccessif [  "$P1" == "-f" ]; thenecho "#################### tail -f nohup.out #########################"tail -f nohup.outfi
elsefailed "$msg"
fi

http://www.ppmy.cn/devtools/5887.html

相关文章

MySQL数据库——17.正则表达式

MySQL正则表达式是一种强大的模式匹配工具,用于在文本数据中搜索和匹配特定的模式。MySQL使用正则表达式来执行模式匹配的操作,可以在SELECT语句的WHERE子句中使用,也可以在其他SQL语句中使用。 基本语法: 在MySQL中,正则表达式通常与REGEXP关键字一起使用。基本语法如下…

23种设计模式之结构型模式篇

二、结构型模式 这类模式主要处理类或对象的组合,涉及如何组合类和对象以获得更大的结构。 包括: 适配器模式(Adapter)装饰器模式(Decorator)代理模式(Proxy)外观模式&#xff08…

基于微信小程序的房屋租赁管理系统

介绍 基于微信小程序房屋租赁管理系统,对房东-房屋-房间-租客进行网格化管理,帮助政府部门统计分析所辖区域的出租房屋情况。 微信小程序可以视为一种新形态的应用。相比于已有的嵌入在浏览器中的HTML5网页应用,他具有更高的系统权限&#x…

设计模式(020)行为型之备忘录模式

备忘录模式是一种行为型设计模式,用于在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后可以将该对象恢复到之前的状态。这种模式通常用于需要记录对象状态历史、撤销操作或实现“回到过去”功能的场景。 在…

每日三个JAVA经典面试题(四十四)

1.什么是反应式编程?它如何优化Web应用的性能? 反应式编程是一种编程范式,它通过异步数据流的方式处理事件和数据,以实现高效的数据处理和事件驱动的程序设计。在反应式编程中,数据流可以被观察(Observabl…

pg内核之日志管理器(五)WAL日志

概念 WAL日志 数据库运行过程中,数据一般是会保存在内存和磁盘中,为保证数据的安全性,防止数据库崩溃时数据不丢失,一般都是要保证数据实时落盘的,但是又由于磁盘随机IO读写速率与内存相比慢很多,如果每个…

Swift函数与闭包

一.Swift函数的定义与调用: Swift中的函数使用func关键字进行定义,语法如下: func 函数名(参数名1: 参数类型1, 参数名2: 参数类型2, ...) -> 返回类型 {// 函数体// 执行逻辑return 返回值 }其中,参数名和参数类型是可选的&…

天星金融(原小米金融)履行社会责任,提高社保政策知晓度

二十大报告指出“为民造福是立党为公、执政为民的本质要求“,人民幸福安康是推动高质量发展的最终目的。社会保障作为维护社会公平、增进人民福祉的基本制度,既是“安全网”也是“稳定器”,发挥着改善民生的重要作用。为进一步提升人民群众对…