如何在Linux下通过命令行查看Java应用程序的堆大小(和已使用内存)?
我已经通过jmap试过了。但它提供了信息。关于内部内存区域,如Eden/ PermGen等,这对我来说没什么用。
我想找的是:
最大内存:1GB 最小内存:256mb 堆内存:700mb 已用内存:460mb
这是所有。我知道我可以在JConsole等中看到这一点,但我需要通过命令行来完成。(不能启用JMX等)
如何在Linux下通过命令行查看Java应用程序的堆大小(和已使用内存)?
我已经通过jmap试过了。但它提供了信息。关于内部内存区域,如Eden/ PermGen等,这对我来说没什么用。
我想找的是:
最大内存:1GB 最小内存:256mb 堆内存:700mb 已用内存:460mb
这是所有。我知道我可以在JConsole等中看到这一点,但我需要通过命令行来完成。(不能启用JMX等)
当前回答
有一个具有可视化方面的命令行工具——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
如果不使用大多数工具使用的JMX,您所能做的就是使用
jps -lvm
并推断设置将来自命令行选项。
默认情况下,如果没有JMX,就无法获得动态信息,但是可以编写自己的服务来实现这一点。
顺便说一句:我更喜欢使用VisualVM而不是JConsole。
我觉得jmap已经弃用了。我使用以下命令来监控正在运行的java应用程序的堆。正如在答案中从PS -aux(或使用其他方法)获取PID,并使用该命令
jhsdb jmap --heap --pid <PID>
你可以观察到以下细节;
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
在我的情况下,我需要检查一个docker容器内的标志,它没有大多数基本的实用程序(ps, pstree…)
使用jps,我得到了运行的JVM的PID(在我的情况下1),然后用jcmd 1 VM。我从运行的JVM中获得了这些标志。
这取决于您有哪些可用的命令,但这可能会对某些人有所帮助。:)