当前位置: 移动技术网 > IT编程>开发语言>Java > Windows下jmap命令报错问题

Windows下jmap命令报错问题

2019年09月16日  | 移动技术网IT编程  | 我要评论

   最近换了笔记本,新的工作环境下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,然而还是报同样的错:

这下无助了,百度、stackoverflow逛了一圈也没找到解决问题的办法.....先放一放?
=
==============================华丽丽的分隔符==============================
=
大概过了不知道多久,猛地想起来 - - “是不是命令没敲对?”,jmap -h 走一波,仔细看截图中红框内容,然后羞愧的低下了头(一定是中秋月饼吃多了才导致的,嗯!)

如图jmap有三种用法,1、连接正在运行的进程 2、分析core文件,即dump文件 3、连接其他机器的jvm进程所以,上面jmap heap xxx命令的问题就出在搞忘记加 " - " 了,被jmap当作是要分析 “heap” 这个快照文件了,报错也就理所应当了。

总结:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网