今天排查线上问题的时候,执行jmap -heap 1
遇见一个报错:
Error: -heap option used
Cannot connect to core dump or remote debug server. Use jhsdb jmap instead
这是因为在较新的 JDK 版本中,jmap
工具的一些功能被 jhsdb jmap
替代了,特别是在连接核心转储文件或远程调试服务器时。
1. 使用 jhsdb jmap
替代 jmap -heap
jhsdb jmap
是 JDK 9 及更高版本中推荐使用的工具,可用于替代 jmap
的部分功能。你可以使用以下命令来查看指定进程的堆内存信息:
jhsdb jmap --heap --pid 1
这里的 1
是 Java 进程的 PID,你要根据实际情况进行替换。
2. 命令详细解释
jhsdb
:JDK 提供的一个诊断工具,可用于分析 Java 进程、核心转储文件等。jmap
:是jhsdb
的一个子命令,用于执行与内存映射相关的操作。--heap
:指定要查看堆内存的详细信息,如堆的配置、各代的使用情况等。--pid
:用于指定要分析的 Java 进程的 ID。
3. 示例操作步骤
步骤 1:确认 Java 进程的 PID
你可以使用 jps
命令来查看当前系统中所有 Java 进程的 PID:
jps
输出示例:
1234 MainClass
5678 AnotherClass
这里的 1234
和 5678
就是 Java 进程的 PID。
步骤 2:使用 jhsdb jmap
查看堆内存信息
假设要查看 PID 为 1234
的 Java 进程的堆内存信息,可以执行以下命令:
jhsdb jmap --heap --pid 1234
执行该命令后,会输出堆内存的详细信息,包括堆的配置信息、各代的使用情况等,示例输出如下:
Attaching to process ID 1234, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 44564480 (42.5MB)
MaxNewSize = 715520000 (682.375MB)
OldSize = 89653248 (85.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 36700160 (35.0MB)
used = 18350080 (17.5MB)
free = 18350080 (17.5MB)
50.0% used
From Space:
capacity = 4456448 (4.25MB)
used = 0 (0.0MB)
free = 4456448 (4.25MB)
0.0% used
To Space:
capacity = 4456448 (4.25MB)
used = 0 (0.0MB)
free = 4456448 (4.25MB)
0.0% used
PS Old Generation
capacity = 89653248 (85.5MB)
used = 44826624 (42.75MB)
free = 44826624 (42.75MB)
50.0% used
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论