欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Windows下jmap命令报错问题

程序员文章站 2022-04-15 08:53:18
   最近换了笔记本,新的工作环境下jmap命令居然在报错,而jps、jstat、jinfo、jstack都能正常使用,所以初步排除进程号的问题。 同时,又试了下 一个不存在的进程号(这里先埋个坑),还是报同样的错误,根据异常栈的信息,怀疑是Windows下的命令行没有 ......

   最近换了笔记本,新的工作环境下jmap命令居然在报错,而jps、jstat、jinfo、jstack都能正常使用,所以初步排除进程号的问题。

attaching to core 17536 from executable heap, please wait...
error attaching to core file: windbg error: opendumpfile failed!
sun.jvm.hotspot.debugger.debuggerexception: windbg error: opendumpfile failed!
        at sun.jvm.hotspot.debugger.windbg.windbgdebuggerlocal.attach0(native method)
        at sun.jvm.hotspot.debugger.windbg.windbgdebuggerlocal.attach(windbgdebuggerlocal.java:160)
        at sun.jvm.hotspot.hotspotagent.attachdebugger(hotspotagent.java:673)
        at sun.jvm.hotspot.hotspotagent.setupdebuggerwin32(hotspotagent.java:569)
        at sun.jvm.hotspot.hotspotagent.setupdebugger(hotspotagent.java:335)
        at sun.jvm.hotspot.hotspotagent.go(hotspotagent.java:304)
        at sun.jvm.hotspot.hotspotagent.attach(hotspotagent.java:156)
        at sun.jvm.hotspot.tools.tool.start(tool.java:191)
        at sun.jvm.hotspot.tools.tool.execute(tool.java:118)
        at sun.jvm.hotspot.tools.pmap.main(pmap.java:72)
        at sun.reflect.nativemethodaccessorimpl.invoke0(native method)
        at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)
        at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)
        at java.lang.reflect.method.invoke(method.java:498)
        at sun.tools.jmap.jmap.runtool(jmap.java:201)
        at sun.tools.jmap.jmap.main(jmap.java:130)

同时,又试了下jmap heap xxx一个不存在的进程号(这里先埋个坑),还是报同样的错误,根据异常栈的信息,怀疑是windows下的命令行没有管理员权限,无法访问dump文件,所以试了下以管理员运行cmd,然后jmap heap,然而还是报同样的错:
Windows下jmap命令报错问题
这下无助了,百度、*逛了一圈也没找到解决问题的办法.....先放一放?
=
==============================华丽丽的分隔符==============================
=
大概过了不知道多久,猛地想起来 - - “是不是命令没敲对?”,jmap -h 走一波,仔细看截图中红框内容,然后羞愧的低下了头(一定是中秋月饼吃多了才导致的,嗯!)
Windows下jmap命令报错问题
如图jmap有三种用法,1、连接正在运行的进程 2、分析core文件,即dump文件 3、连接其他机器的jvm进程所以,上面jmap heap xxx命令的问题就出在搞忘记加 " - " 了,被jmap当作是要分析 “heap” 这个快照文件了,报错也就理所应当了。

总结:

   jdk自带的工具包中,像jps、jmap、jstack等这些命令,指定option一般都是要带 “ - ” 的,而紧跟的参数是不带杠的,这点需要牢记。还有就是报异常了不要慌,一定要仔细读异常提示信息和异常栈,拿本例来说,其实第一行已经提示清楚了(小小吐槽下:要是把文件名也打印出来就更好了)