我可以查看正在运行的JVM的堆使用从命令行,我指的是实际使用,而不是与XMX分配的最大金额。
我需要它的命令行,因为我没有获得一个窗口环境,我想基于价值的脚本,应用程序在码头的应用服务器上运行
我可以查看正在运行的JVM的堆使用从命令行,我指的是实际使用,而不是与XMX分配的最大金额。
我需要它的命令行,因为我没有获得一个窗口环境,我想基于价值的脚本,应用程序在码头的应用服务器上运行
您可以使用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}'
该命令主要总结:
您可能还需要包括元空间和压缩类空间利用率。 在这种情况下,你必须添加一个[10]和[12]对AWK总和。
如果你开始执行的GC日志记录功能后,您获得文件信息。 否则,“JMAP -heap”会给你想要的东西。 见JMAP文档页面为多。
请注意, jmap
不应在生产环境中使用,除非绝对必要的工具停止应用程序能够确定实际的堆使用。 通常,这是不是在生产环境所需。
所有程序一次。 基于@Till舍费尔的答案。
在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总和”参考:
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