2016-09-28 3 views
0

再起動/再起動のためにWebサーバーがダウンする前にJavaアプリケーションWebサーバーで操作を実行するbashスクリプトを作成しています。その一環として、JVMに提供された最大ヒープ割り当て(Xmxオプション)が何であるかを調べる必要があります。このオプションのこの値は、Webアプリケーションがデプロイされたハードウェアによって異なります。私はそこヒープダンプを作成するために、私たちのloggingパーティションに十分なスペースがあるかどうかを判断するために、この値を使用することになりますコマンドラインから実行中のJVMの最大ヒープサイズを取得する:JDKツールなし

XMX_JVM_VALUE=$(command[s] here) 

:私は、私は次のように変数を設定するためにスクリプトで使用できる何かを探しています。この値は、経由で収集されます:私が持っている2つの制約は、JREがサーバ上でしかないとして、私はJDKツールを使用することができないということであると私は、システムに付属の通常のLinuxコマンドに制限されています

LOG_DISK_SPACE=$(df -P /var/log | awk 'NR==2{print $4}') 

(物事grep,ps,awkなど)。およそ

+0

最悪の場合、 '/ proc/yourpid/cmdline'から解析します。 –

+0

私はこれに似たことをしています。問題は、Xmxオプション( 'Xmx2048m'、' Xmx4g'など)に付加される可能性のある接頭辞を扱い、その結果をその値をストレートバイトで表す数値に変換することです。 – Andrew

答えて

0

多くの試行錯誤の末、私は次の解決策を打ちました。これは、最大のXmx値を持つJVMプロセスが関心のあるものであるという前提を使用しています。

DATA_UNIT_MULTIPLIER=1024 
XMX_JVM_VALUE=$(ps -ef | grep -oP "Xmx\d+(m|g)" | sort -rn | cut -d'x' -f2 | head -1) 
XMX_DATA_UNIT="${XMX_JVM_VALUE:$((${#XMX_JVM_VALUE}-1)):1}" 
XMX_JVM_NUM=$(echo $XMX_JVM_VALUE | sed '$s/.$//') 

XMX_SIZE=1 
if [ "$XMX_DATA_UNIT" = "m" ]; then 
    XMX_SIZE=$(($XMX_JVM_NUM * $DATA_UNIT_MULTIPLIER)) 
elif [ "$XMX_DATA_UNIT" = "g" ]; then 
    XMX_SIZE=$(($XMX_JVM_NUM * $DATA_UNIT_MULTIPLIER * $DATA_UNIT_MULTIPLIER)) 
fi 

この実装はdfによって報告されている同一の単位にXmxの値を変換します。 Xmxオプションの単位サフィックスも考慮します。

0

どのように...

java -XX:+PrintFlagsFinal 2> /dev/null | grep MaxHeapSize 

javaコマンドは、JREで利用可能です。

+0

この問題は、おそらく新しいJVMを開始し、その統計情報を提供するのではなく、あなたが学びたいJVMではないことを認識しています。 –

+0

それはそのように見えます。 – Andrew

関連する問題