系统问题排查

1. thread dump方案

kill -3 pid      执行后文件的保存路径为:/proc/${pid}/cwd

jstack pid

pstack pid

profiler

top -Hp pid   查看进程的线程资源占用情况(printf "%x\n" id   将十进制转换为16进制)

 

2. javacore与heapdump

为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件。

 a. JavaCore是关于CPU的

JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。

b. HeapDump文件是关于内存的。

HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况

参考: https://www.cnblogs.com/jingmoxukong/p/5509196.html

3. heapdump分析堆上实例的数据

jmap -dump:format-b,file=heapdump.phrof

jhat heapdump.phrof

浏览器访问:http://localhost:7000

使用OQL查询对象:

   a. select heap.findClass("com.test.TestXXX")        // 先找到类

  b. 点击a步骤找到的类,点击链接进去,再在页面找到Instances并点击“Include subclasses”链接进去,找到实例的十六进制的地址

  c. select heap.findObject("0x911da930")               // 根据十六进制地址找到对象

  d. 点击c步骤中找到的对象实例链接,进入详情页面即可以看到实例的数据

 

posted @ 2019-07-24 17:20  不是外国佬  阅读(351)  评论(0编辑  收藏  举报