実行中のJVMのヒープ使用量をコマンドラインから確認できますか。Xmxで割り当てられた最大量ではなく、実際の使用量を意味します。
ウィンドウ環境にアクセスできないため、コマンドラインである必要があり、値に基づいてスクリプトが必要で、アプリケーションはJettyアプリケーションサーバーで実行されています
次のようにjstatを使用できます。
jstat -gc pid
完全なドキュメントはこちら: http://docs.Oracle.com/javase/7/docs/technotes/tools/share/jstat.html
Java 8の場合、次のコマンドラインを使用して、ヒープスペースの使用率をkBで取得できます。
jstat -gc <PID> | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]; print sum}'
このコマンドは基本的に次のように要約されます。
メタスペースと圧縮されたクラススペースの使用率を含めることもできます。この場合、awk sumにa [10]とa [12]を追加する必要があります。
Gcロギングをオンにして実行を開始すると、ファイルに関する情報が得られます。それ以外の場合、「jmap -heap」は必要なものを提供します。詳細については、 jmap doc page をご覧ください。
jmap
は、ツールが実際の決定を可能にするためにアプリケーションを停止するために絶対に必要でない限り、実稼働環境ではnotを使用すべきではないことに注意してくださいヒープ使用量。通常、これは実稼働環境では望ましくありません。
すべての手順を一度に。 @TillSchäferの回答に基づきます。
KBで...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]+a[10]+a[12]; print sum}'
MB ...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=(a[3]+a[4]+a[6]+a[8]+a[10]+a[12])/1024; print sum" MB"}'
「Awk sum」参照:
a[1] - S0C
a[2] - S1C
a[3] - S0U
a[4] - S1U
a[5] - EC
a[6] - EU
a[7] - OC
a[8] - OU
a[9] - PC
a[10] - PU
a[11] - YGC
a[12] - YGCT
a[13] - FGC
a[14] - FGCT
a[15] - GCT
ありがとう!
注: OpenJDKで動作します!
さらに質問:間違った情報?
ps
コマンドを使用してメモリ使用量を確認すると、Javaプロセスがさらに多くを消費していることがわかります...
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1