【发布时间】:2014-06-19 11:00:00
【问题描述】:
我有一个 linux 系统,其中有一个 JVM,它被 3 个 java 进程使用。
/home/codesrc>java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
所以,我有 3 个使用同一个 JRE 运行的进程。 每个进程都有自己的内存定义在命令行时像
java -Xms256m -Xmx1024m -cp $CLASSPATH <class name>
java -Xms256m -Xmx512m -cp $CLASSPATH <class name>
java -Xms256m -Xmx705m -cp $CLASSPATH <class name>
linux系统的内存是4GB。我正在尝试为每个进程分别查找堆使用情况。由于系统上没有 JDK,我无法使用 jmap、jconsole 或 jstack。 我试过了
Runtime.getRuntime().totalMemory()
但这并没有给我基于流程的信息,而且上面的输出也不正确 有没有人知道如何在仅使用 JRE 时检查堆使用情况,相当于
jmap -heap <PID>
【问题讨论】:
-
您可以使用visualvm或jconsole连接到正在运行的进程并查看它的堆大小。
-
我尝试通过安装 JDK 来 jmap 和 jstack,但出现以下错误:正在附加到进程 ID 10431,请稍候...线程“main”中的异常 java.lang.RuntimeException:键入“在远程 VM 中的 VMStructs::localHotSpotVMStructs 中引用的 nmethodBucket*" 不存在于远程 VMStructs::localHotSpotVMTypes 表中(应该已在该 VM 的调试版本中捕获)。无法继续。
标签: java memory-management heap-memory