How to check heap usage of a running JVM from the command line?

前端 未结 4 1294
忘了有多久
忘了有多久 2020-12-12 21:34

Can I check heap usage of a running JVM from the commandline, I mean the actual usage rather than the max amount allocated with Xmx.

I need it to be commandline beca

相关标签:
4条回答
  • 2020-12-12 21:42

    If you start execution with gc logging turned on you get the info on file. Otherwise 'jmap -heap ' will give you what you want. See the jmap doc page for more.

    Please note that jmap should not be used in a production environment unless absolutely needed as the tool halts the application to be able to determine actual heap usage. Usually this is not desired in a production environment.

    0 讨论(0)
  • 2020-12-12 21:43

    You can use jstat, like :

     jstat -gc pid
    

    Full docs here : http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

    0 讨论(0)
  • 2020-12-12 21:53

    All procedure at once. Based on @Till Schäfer answer.

    In 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}'
    

    In 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" reference:

     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
    

    Thanks!

    NOTE: Works to OpenJDK!

    FURTHER QUESTION: Wrong information?

    If you check memory usage with the ps command, you will see that the java process consumes much more...

    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
    
    0 讨论(0)
  • 2020-12-12 21:54

    For Java 8 you can use the following command line to get the heap space utilization in kB:

    jstat -gc <PID> | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]; print sum}'
    

    The command basically sums up:

    • S0U: Survivor space 0 utilization (kB).
    • S1U: Survivor space 1 utilization (kB).
    • EU: Eden space utilization (kB).
    • OU: Old space utilization (kB).

    You may also want to include the metaspace and the compressed class space utilization. In this case you have to add a[10] and a[12] to the awk sum.

    0 讨论(0)
提交回复
热议问题