[解决方案]Error attaching to core file: cannot open binary file
解决方案
出现原因
面试官:线上java程序cpu一直满载运行你是怎么排查的 我: 吧啦吧啦。。。。线上日志查看 面试官:好,谢谢你参加我们公司的面试。
。。。有被难受到,楼主目前所在公司业务模块上线运营3年多了,线上出现的问题都能排查解决到,但cpu过高确实没碰到过,回来补习。
再来一次什么叫一波三折。(尤其是上面这个问题)
出错命令在这里
我猜你也是这样的命令(如果不是也没关系 可以试着看完)
jstack 9302 -> test_webtest_log.txt
[root@rd001 ~]# jstack 9302 -> test_webtest_log.txt
Error attaching to core file: cannot open binary file
sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file
at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)
at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:286)
at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:673)
at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)
at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)
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.JStack.main(JStack.java:92)
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.jstack.JStack.runJStackTool(JStack.java:140)
at sun.tools.jstack.JStack.main(JStack.java:106)
解决方案在这里
jstack 9302
该命令会将当前java进程的线程运行日志直接打印在控制台上 我们可以先打印在控制台 在复制出来。 虽然有点笨 但目前看只能这样 ,楼主查阅了很多资料
有关一个外网的解决方案
解决方案提供的链接 楼主直接升级到了jdk11版本,接下来看效果
还是不太行。又反复尝试解决了好久。终于。。。。。。出来了 在java9及以上版本中通过该命令可以做到将日志输出到本地文件中 PS:java8中无jhsdb命令
jhsdb jstack --pid 3041 -> test_bbbbbb.log
总结
- 直接输出到控制台,复制出来查看
- 升级jdk版本为9或者9以上通过jhsdb命令输出到文件里面
延伸(java程序内存泄漏怎么排查)
下一篇文章解答
希望本文可以帮到你。
|