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

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

我想找的是:

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

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


当前回答

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

java -XX:+PrintFlagsFinal -version | grep HeapSize

它也适用于Amazon AMI和EC2。

其他回答

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

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

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

示例:

如果不使用大多数工具使用的JMX,您所能做的就是使用

jps -lvm

并推断设置将来自命令行选项。

默认情况下,如果没有JMX,就无法获得动态信息,但是可以编写自己的服务来实现这一点。

顺便说一句:我更喜欢使用VisualVM而不是JConsole。

使用top命令是检查程序内存使用情况的最简单方法。RES列显示进程占用的实际物理内存。

对于我的情况,我有一个10g的文件在java中读取,每次我得到outOfMemory异常。当RES列中的值达到-Xmx选项中设置的值时,就会发生这种情况。然后使用-Xmx选项增加内存,一切正常。

首先获取进程id,从下面列出的进程中的第一个数字(或者使用ps aux | grep java,如果你喜欢的话)

jps -lvm

然后在这里使用进程ID:

jmap -heap $MY_PID 2>/dev/null | sed -ne '/Heap Configuration/,$p';
jmap -permstat $MY_PID

就Java堆大小而言,在Linux中可以使用

ps aux | grep java

or

ps -ef | grep java

并查找-Xms, -Xmx以找出指定的初始和最大堆大小。

但是,如果您感兴趣的Java进程中没有-Xms或-Xmx,则意味着您的Java进程正在使用默认的堆大小。您可以使用以下命令来查找默认大小。

java -XX:+PrintFlagsFinal -version | grep HeapSize

或者一个特定的jvm,例如,

/path/to/jdk1.8.0_102/bin/java -XX:+PrintFlagsFinal -version | grep HeapSize

并寻找InitialHeapSize和MaxHeapSize,这是以字节为单位。