栈深度排序下,从深度高的往下看,深度一样的一般干的事情一样的,看一个就可以了。然后看以下几种情况:
①大量线程卡在某个地方,可以配合UE进行统计;
②关注一些线程可能在多个线程栈文件都存在,可能这些线程卡了很久了。
1. 所有执行代码是通过线程的,线程dump是某一时刻的镜像、行为。 2. 通过javacore可以分析服务卡问题。 3. 通过javacore可以分析高cpu问题。 4. 通过javacore可以分析压力测试瓶颈。 5. 通过javacore可以分析死锁等问题。 6. 排查以上的问题困难的地方是一部分是业务代码,一部分是框架底层代码。项目组人员可能非常能了解自己写的业务代码,但是不清楚底层的实现。 而架构师比较了解框架,但是不了解业务的代码。通过线程栈是快速沟通发现问题。javacore是一个非常便利的排查工具。 7. 一个程序员从javacore文件能看出多少信息,可以体现这个程序员的水平。 8. 工具只是提供随利的手段,直接要分析依赖对java基础、框架、关建组件的熟悉情况。 9. 生成javacore 使用jstack命令+进程号生成,建议每隔3到5秒执行一次,一共生成五个线程栈文件。如下所示,8075为应用的进程号。 也可以使用kill -3 8075来生成,不过这时线程栈信息将会输出到服务进程日志中。 jstack 8075 >javacore_1.txt jstack 8075 >javacore_2.txt jstack 8075 >javacore_3.txt jstack 8075 >javacore_4.txt jstack 8075 >javacore_5.txt jstack -F 8075 jstack -l 1.查询应用进程中的高cpu线程 top -Hp 进程号 2. 线程号转十六进程 printf "%x\n" 线程号 |