如何在Linux下通过命令行查看Java应用程序的堆大小(和已使用内存)?

我已经通过jmap试过了。但它提供了信息。关于内部内存区域,如Eden/ PermGen等,这对我来说没什么用。

我想找的是:

最大内存:1GB 最小内存:256mb 堆内存:700mb 已用内存:460mb

这是所有。我知道我可以在JConsole等中看到这一点,但我需要通过命令行来完成。(不能启用JMX等)


当前回答

试试这个吧,它在Ubuntu和RedHat都有效:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Windows:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

对于Mac

java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

所有这些命令的输出类似于下面的输出:

uintx InitialHeapSize                          := 20655360        {product}
uintx MaxHeapSize                              := 331350016       {product}
uintx PermSize                                  = 21757952        {pd product}
uintx MaxPermSize                               = 85983232        {pd product}
intx ThreadStackSize                           = 1024            {pd product}
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

要找到以MB为单位的大小,将值除以(1024*1024)。

其他回答

有一个具有可视化方面的命令行工具——jvm-mon。它是一个JVM监控工具,用于命令行显示:

堆使用率、大小和最大值 jvm进程 cpu和GC使用率 前线程

在工具打开时,指标和图表会更新。

示例:

但一个非常简单的解决方案是使用jpsstat.sh脚本。它提供了一个简单的活电流内存,最大内存和cpu使用细节。

进入GitHub项目,下载jpsstat.sh文件 右键单击jpsstat.sh和权限选项卡,使其可执行 现在执行以下命令。/ jpstat .sh

下面是script -的示例输出

=====  ======  =======  =======  =====
 PID    Name   CurHeap  MaxHeap  %_CPU
=====  ======  =======  =======  =====
2777   Test3      1.26     1.26    5.8
2582   Test1      2.52     2.52    8.3
2562   Test2      2.52     2.52    6.4

从顶部找到你的webapp/java进程的进程id。 使用jmap heap获取堆分配。我在AWS-Ec2上测试了弹性豆茎

你可以在图片下面看到3GB的最大堆应用程序

该命令以字节为单位显示配置的堆大小。

java -XX:+PrintFlagsFinal -version | grep HeapSize

它也适用于Amazon AMI和EC2。

试试这个吧,它在Ubuntu和RedHat都有效:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Windows:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

对于Mac

java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

所有这些命令的输出类似于下面的输出:

uintx InitialHeapSize                          := 20655360        {product}
uintx MaxHeapSize                              := 331350016       {product}
uintx PermSize                                  = 21757952        {pd product}
uintx MaxPermSize                               = 85983232        {pd product}
intx ThreadStackSize                           = 1024            {pd product}
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

要找到以MB为单位的大小,将值除以(1024*1024)。