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

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

我想找的是:

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

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


当前回答

在Java8及以上版本中,您可以使用以下命令:

jcmd JAVA_PROCESS_ID GC.heap_info . jcmd

您可以从输出中参考sum of, total和used memory。

Sample Command And Output: jcmd 9758 GC.heap_info

PSYoungGen  total 1579520K, used 487543K [0x0000000751d80000, 0x00000007c0000000, 0x00000007c0000000)
  eden space 1354240K, 36% used [0x0000000751d80000,0x000000076f99dc40,0x00000007a4800000)
  from space 225280K, 0% used [0x00000007b2400000,0x00000007b2400000,0x00000007c0000000)
  to   space 225280K, 0% used [0x00000007a4800000,0x00000007a4800000,0x00000007b2400000)
ParOldGen       total 3610112K, used 0K [0x0000000675800000, 0x0000000751d80000, 0x0000000751d80000)
  object space 3610112K, 0% used [0x0000000675800000,0x0000000675800000,0x0000000751d80000)
Metaspace       used 16292K, capacity 16582K, committed 16896K, reserved 1064960K
  class space    used 1823K, capacity 1936K, committed 2048K, reserved 1048576K

有关jcmd命令的更多详细信息,请访问这里的链接

其他回答

如果使用jrockit,请尝试jrcmd命令行工具。例如:

$ jrcmd 5127 print_memusage
5127:
Total mapped                  1074596KB           (reserved=3728KB)
-              Java heap       786432KB           (reserved=0KB)
-              GC tables        26316KB          
-          Thread stacks        13452KB           (#threads=34)
-          Compiled code         9856KB           (used=9761KB)
-               Internal          840KB          
-                     OS        15036KB          
-                  Other       146632KB          
-        Java class data        75008KB           (malloced=74861KB #103221 in 18709 classes)
- Native memory tracking         1024KB           (malloced=102KB #8)

对于更多命令,如heap_diagnostics,使用“jrcmd help”列出它们。

https://blogs.oracle.com/jrockit/entry/why_is_my_jvm_process_larger_t

jstat -gccapacity javapid  (ex. stat -gccapacity 28745)
jstat -gccapacity javapid gaps frames (ex.  stat -gccapacity 28745 550 10 )

上述命令的O/P示例

NGCMN    NGCMX     NGC     S0C  
87040.0 1397760.0 1327616.0 107520.0 

NGCMN   Minimum new generation capacity (KB).
NGCMX   Maximum new generation capacity (KB).
NGC Current new generation capacity (KB).

更多详情请访问http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

到目前为止,还没有这样的工具可以按照您要求的格式打印堆内存 打印的唯一方法是在运行时类的帮助下写一个java程序,

public class TestMemory {

public static void main(String [] args) {

    int MB = 1024*1024;

    //Getting the runtime reference from system
    Runtime runtime = Runtime.getRuntime();

    //Print used memory
    System.out.println("Used Memory:" 
        + (runtime.totalMemory() - runtime.freeMemory()) / MB);

    //Print free memory
    System.out.println("Free Memory:" 
        + runtime.freeMemory() / mb);

    //Print total available memory
    System.out.println("Total Memory:" + runtime.totalMemory() / MB);

    //Print Maximum available memory
    System.out.println("Max Memory:" + runtime.maxMemory() / MB);
}

}

参考:https://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/

但一个非常简单的解决方案是使用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

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

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

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

示例: