如何从命令行检查正在运行的 JVM 的堆使用情况?

我可以从命令行检查正在运行的JVM的堆使用情况吗,我的意思是实际使用情况,而不是使用Xmx分配的最大数量。

我需要它是命令行,因为我无法访问窗口环境,并且我想要基于值的脚本,应用程序在Jetty应用程序服务器中运行


答案 1

你可以使用jstat,比如:

 jstat -gc pid

完整的文档在这里 : http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html


答案 2

对于 Java 8,您可以使用以下命令行来获取堆空间利用率(以 kB 为单位):

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

该命令基本上总结如下:

  • S0U:幸存者空间 0 利用率 (kB)。
  • S1U:幸存者空间 1 利用率 (kB)。
  • 欧盟:伊甸园空间利用率 (kB)。
  • OU:旧空间利用率 (kB)。

您可能还希望包括元空间和压缩类空间利用率。在这种情况下,您必须将 a[10] 和 a[12] 添加到 awk 和中。