问题

是否有命令行工具(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。


原文链接