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 オプションを使用して、実行する 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:+UseConcMarkSweatGC /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

5. まとめ

この記事では、Java 実行可能 JAR ファイルの実行スキルをよりよく習得するのに役立つ、java -jar コマンドの共通パラメータ、使用方法、および起動スクリプトを紹介します。これらのパラメーターを適切に構成することで、アプリケーションのパフォーマンス、メモリ使用量、システム プロパティを最適化し、アプリケーションの安定性と効率を向上させることができます。

実際のアプリケーションでは、特定のニーズや環境に応じてパラメーターを調整および構成できます。これらのパラメータの機能と使用法を理解することは、Java アプリケーションの開発とデプロイに非常に役立ちます。

この記事があなたにインスピレーションを与え、java -jar コマンドをよりよく理解して使用するのに役立つことを願っています。ご質問やご提案がございましたら、以下にメッセージを残してください。できるだけ早く返信させていただきます。読んでくれてありがとう!, Markdown の基本的な構文知識について学びます。

おすすめ

転載: blog.csdn.net/weixin_44002151/article/details/131224407