问题
是否有命令行工具(Linux)来检查Java应用程序的堆大小(和使用的内存)?
我试过jmap。但它提供了信息。关于内部记忆区域,如Eden / PermGen等,这对我没用。
我正在寻找类似的东西:
最大内存:1GB
最小内存:256 MB
堆内存:700 MB
使用的内存:460 MB
就这样。我知道我可以在JConsole等中看到这个,但我需要一个命令行工具(不能启用JMX等)
任何这样的工具/命令?
#1 热门回答(104 赞)
每个Java进程都有一个pid
,你首先需要使用jps
命令找到它。
获得pid后,可以使用jstat -gc [insert-pid-here]
查找垃圾收集堆行为的统计信息。
- jstat -gccapacity [insert-pid-here]将显示有关内存池生成和空间功能的信息。
- jstat -gcutil [insert-pid-here]将以每个容量的百分比形式显示每一代的利用率。有助于快速了解使用情况。
请参见Oracle网站上的jstat docs。
#2 热门回答(57 赞)
jvmtop是一个命令行工具,它提供多个指标的实时视图,包括堆。
VM概述模式的示例输出:
JvmTop 0.3 alpha (expect bugs) amd64 8 cpus, Linux 2.6.32-27, load avg 0.12
http://code.google.com/p/jvmtop
PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL
3370 rapperSimpleApp 165m 455m 109m 176m 0.12% 0.00% S6U37 web 21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager 11m 28m 23m 130m 0.00% 0.00% S6U37 web 31
19187 m.jvmtop.JvmTop 20m 3544m 13m 130m 0.93% 0.47% S6U37 web 20
16733 artup.Bootstrap 159m 455m 166m 304m 0.12% 0.00% S6U37 web 46
#3 热门回答(39 赞)
此命令显示配置的堆大小(以字节为单位)。
java -XX:+PrintFlagsFinal -version | grep HeapSize
它也适用于EC2上的Amazon AMI。