Java -jar 매개변수에 대한 자세한 설명: Java 실행 가능 JAR 파일의 실행 기술을 마스터하세요.

일반적으로 사용되는 개발 언어인 Java는 실행 가능한 JAR(Java Archive) 파일을 사용하여 애플리케이션을 패키지하고 배포하는 경우가 많습니다. java -jar 명령을 사용하여 JAR 파일을 실행하는 것은 편리하고 빠른 방법입니다. 이 기사에서는 이 기능을 최대한 활용하는 데 도움이 되는 java -jar 명령의 다양한 매개변수를 자세히 소개합니다.

1. 소개

java -jar 명령은 실행 가능한 JAR 파일을 실행하는 데 사용됩니다. JAR 파일에서 매니페스트 파일(MANIFEST.MF)을 자동으로 찾고 매니페스트 파일의 Main-Class 속성에 지정된 기본 클래스를 기반으로 애플리케이션을 시작합니다.

2. 일반적으로 사용되는 매개변수에 대한 자세한 설명

다음은 java -jar 명령에서 일반적으로 사용되는 몇 가지 매개변수들인데, 이들의 기능과 사용법을 하나씩 이해해 보자.

  1. -Xmx: Java 힙의 최대 메모리 크기를 지정합니다. 예를 들어 -Xmx512m은 최대 힙 메모리를 512MB로 설정한다는 의미입니다. 힙 메모리 크기를 조정하면 애플리케이션의 성능과 메모리 사용량을 최적화할 수 있습니다.

  2. -Xms: Java 힙의 초기 메모리 크기를 지정합니다. 예를 들어 -Xms256m은 초기 힙 메모리를 256MB로 설정한다는 의미입니다. 이 매개변수는 애플리케이션을 시작할 때 초기 메모리 할당 크기를 제어하는 ​​데 도움이 됩니다.

  3. -Xss: 스레드 스택의 크기를 지정합니다. 예를 들어 -Xss1m은 스레드 스택 크기를 1MB로 설정한다는 의미입니다. 스레드 스택은 스레드의 지역 변수 및 메서드 호출 정보를 저장하는 데 사용됩니다. 스레드 스택의 크기를 조정하여 애플리케이션의 동시성 성능과 메모리 사용량을 제어할 수 있습니다.

  4. -XX:MetaspaceSize=256m 매개변수를 사용하면 메타공간의 초기 크기를 256MB로 지정할 수 있습니다. 이는 애플리케이션이 시작될 때 가상 머신이 클래스 메타데이터를 저장하기 위해 256MB의 메모리를 사전 할당한다는 것을 의미합니다.

  5. -XX:MaxMetaspaceSize=: 메타스페이스의 최대 크기를 지정합니다. 메타스페이스는 클래스의 메타데이터 정보를 저장하는 데 사용됩니다. 예를 들어 -XX:MaxMetaspaceSize=256m은 메타공간의 최대 크기를 256MB로 설정한다는 의미입니다. 메타공간의 크기를 적절하게 조정하면 클래스 로딩 및 메타데이터 오버플로 문제를 피할 수 있습니다.

  6. -D=: 시스템 속성을 설정합니다. 예를 들어 -Djava.library.path=/path/to/libs는 java.library.path 시스템 속성을 /path/to/libs로 설정합니다. 이 매개변수를 사용하여 파일 경로, 로그 수준 등과 같은 애플리케이션의 일부 속성을 구성할 수 있습니다.

  7. -verbose:class: 클래스 로딩 정보를 인쇄합니다. 클래스 이름, 소스 등을 포함하여 작업 중에 애플리케이션이 로드한 클래스에 대한 자세한 정보를 알아보려면 이 매개변수를 사용합니다.

  8. -verbose:gc: 가비지 수집 정보를 인쇄합니다. 이 매개변수를 사용하면 가비지 수집기 사용, 수집된 개체 수 등을 포함하여 애플리케이션의 가비지 수집 상태를 이해할 수 있습니다.

  9. -Dfile.encoding=: 기본 파일 인코딩을 설정합니다. 예를 들어, -Dfile.encoding=UTF-8은 UTF-8 인코딩을 사용하여 파일을 읽고 쓰는 것을 의미합니다. 파일 인코딩을 올바르게 설정하면 응용 프로그램이 다양한 문자 집합의 텍스트 데이터를 올바르게 처리할 수 있습니다.

위의 내용은 java -jar 명령에서 일반적으로 사용되는 몇 가지 매개변수입니다. 이러한 매개변수를 유연하게 사용하면 애플리케이션의 성능, 메모리 사용량 및 시스템 속성을 최적화하고 구성할 수 있습니다.

3. 사용예

예 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 옵션을 통해 myapp.jar로 실행할 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 > nohup. 밖으로 2>&1 &

4. 시작 스크립트

일반적으로 서비스를 시작하기 위해 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 ]]
then
    echo "##### The JDK is OK!"
    JAVA_PATH=`which java`
else
    echo "##### The JDK is not supported!"
fi

# ### 扫描/opt和/usr目录获取JAVA_PATH
reg='jdk1.8.0_[0-9]{1,3}/bin/java'
if [ "$JAVA_PATH" = "" ]; then
    echo "##### 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_DIR
    do
        if [[ $i =~ $reg ]]; then
            echo "##### JDK_PATH : $i"
            echo "##### The JDK_PATH is OK!"
            JAVA_PATH=$i
        fi
    done
fi

if [ "$JAVA_PATH" = "" ]; then
    echo "##### '/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_DIR
    do
        if [[ $i =~ $reg ]]; then
            echo "##### JDK_PATH : $i"
            echo "##### The JDK_PATH is OK!"
            JAVA_PATH=$i
        fi
    done
fi
if [ "$JAVA_PATH" = "" ]; then
    echo "##### '/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" ]; then
    msg="The jar file is not exist! Please confirm before implementation."
    echo "##### $msg"
    failed "$msg"
    exit
fi

echo "##### 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.pid

if [ $? -eq 0 ]; then
    success
    if [  "$P1" == "-f" ]; then
        echo "#################### tail -f nohup.out #########################"
        tail -f nohup.out
    fi
else
    failed "$msg"
fi

V. 요약

이 기사에서는 Java 실행 가능한 JAR 파일의 실행 기술을 더 잘 익히는 데 도움이 되는 java -jar 명령의 공통 매개변수, 사용 방법 및 시작 스크립트를 소개합니다. 이러한 매개변수를 적절하게 구성하면 애플리케이션의 성능, 메모리 사용량 및 시스템 속성을 최적화하고 애플리케이션의 안정성과 효율성을 향상시킬 수 있습니다.

실제 애플리케이션에서는 특정 요구 사항과 환경에 따라 매개변수를 조정하고 구성할 수 있습니다. 이러한 매개변수의 기능과 사용법을 이해하면 Java 애플리케이션을 개발하고 배포하는 데 매우 도움이 됩니다.

이 기사가 여러분에게 영감을 주고 java -jar 명령을 더 잘 이해하고 사용하는 데 도움이 되기를 바랍니다. 문의사항이나 제안사항이 있으신 경우 아래 메시지를 남겨주시면 최대한 빨리 답변해드리겠습니다. 읽어 주셔서 감사합니다! , Markdown의 기본 구문 지식에 대해 알아보세요.

추천

출처blog.csdn.net/weixin_44002151/article/details/131224407