JVMlinuxlinux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not f

Posted sxdcgaq8080

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVMlinuxlinux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not f相关的知识,希望对你有一定的参考价值。

运行命令:

jmap -heap 6709

 

报错如下:

Attaching to process ID 6709, please wait...
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library names (libjvm.so, libjvm_g.so, gamma_g)
    at sun.jvm.hotspot.HotSpotTypeDataBase.lookupInProcess(HotSpotTypeDataBase.java:585)
    at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:150)
    at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:85)
    at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:569)
    at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:493)
    at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:331)
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
    at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.tools.jmap.JMap.runTool(JMap.java:197)
    at sun.tools.jmap.JMap.main(JMap.java:128)
Debugger attached successfully.
sun.jvm.hotspot.tools.HeapSummary requires a java VM process/core!

技术图片

 

 

报错原因:

  根据错误提示,可以看出来,需要一个java jvm的核心进程。

  明明PID就是我java进程的PID,进程编号呀。

 

错误原因:

  PID不是你要查看的JAVA进程的PID,注意区分你到底要查看那个JVM进程。

 

解决方法:

  查看java进程的PID

ps -ef | grep java

技术图片

 

  现在自己查看一下,就可以发现

  6709是另一个位置的java进程。

  19570才是 我们当前想要查看的JVM进程。

  因为自己安装的java路径在/mnt/apps/soft/java路径 。配置的环境变量也是这个路径下的JDK.

 

  所以运行jmap指定错误的PID就导致了开始的错误。

 

  现在修改jmap指定的PID

jmap -heap 19570

 

运行成功:

技术图片

Attaching to process ID 19570, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 0
   MaxHeapFreeRatio = 100
   MaxHeapSize      = 4164943872 (3972.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 1245708288 (1188.0MB)
   used     = 550338952 (524.844123840332MB)
   free     = 695369336 (663.155876159668MB)
   44.17879830305825% used
From Space:
   capacity = 68681728 (65.5MB)
   used     = 507920 (0.4843902587890625MB)
   free     = 68173808 (65.01560974121094MB)
   0.7395271126550572% used
To Space:
   capacity = 70254592 (67.0MB)
   used     = 0 (0.0MB)
   free     = 70254592 (67.0MB)
   0.0% used
PS Old Generation
   capacity = 217055232 (207.0MB)
   used     = 116954920 (111.53690338134766MB)
   free     = 100100312 (95.46309661865234MB)
   53.88256201997471% used
PS Perm Generation
   capacity = 85983232 (82.0MB)
   used     = 75303848 (71.81534576416016MB)
   free     = 10679384 (10.184654235839844MB)
   87.57968995629287% used

40959 interned Strings occupying 4521736 bytes.

 

以上是关于JVMlinuxlinux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not f的主要内容,如果未能解决你的问题,请参考以下文章

Java的jmap命令使用详解

jvm 性能调优工具之 jmap

JDK中自带的用于分析JVM内存状况的工具Jmap

jstack(查看线程)jmap(查看内存)和jstat(性能分析)命令

13.4.虚拟化工具--jmap详解

java的jvm调优相关工具——jvm调优GC压测linux命令