Java生产环境下性能监控与调优详解(三)————JSTACK工具介绍

引言

回顾下上两节的基础知识:

  • jps(java process status)
    用来查看所有的jvm进程,包括进程ID,进程启动的路径等。jps -l 可以具体到包启动路径的进程
  • jinfo
    负责观察进程运行环境参数,包括Java System属性和JVM命令行参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息
  • jstat
    查看JVM统计信息(类加载信息,垃圾回收信息,JIT编译信息等)
  • jmap
    导出镜像文件
    jmap -dump:live,format=b,file=outofmemory.hprof 6448

导出镜像文件后用dump分析工具比如MAT分析具体原因。那么,在生产上我们想知道是哪个进程导致内存飙高了,并且要把这个进程的内存镜像文件DUMP出来应该怎么做呢?

JSTACK工具

  • top 命令
    这里需要提醒大家的一点是top命令是Linux系统的命令,这个不同于JDK自带的jps系列,这个在Linux可以查看内存使用情况,定位到哪个服务进程占用CPU过高。
    Java生产环境下性能监控与调优详解(三)————JSTACK工具介绍_第1张图片
  • JSATCK命令
    针对某个CPU占用过高的服务进程,使用JSTACK查看或者重定向DUMP文件。
    Java生产环境下性能监控与调优详解(三)————JSTACK工具介绍_第2张图片
  • 查看服务进程中的线程
    top -bn1 -H -p 29068
    Java生产环境下性能监控与调优详解(三)————JSTACK工具介绍_第3张图片
  • 假设是线程29082 CPU占用过高
    因为thread id在栈信息中是以十六进制的形式显示的,所以我们要对29082线程做下16进制转换
    printf “%x \n” 29082
    转换后再dump中进行查找
    jstack 29068|grep 0x719a -A -10
    Java生产环境下性能监控与调优详解(三)————JSTACK工具介绍_第4张图片

总结

因为没有进行内存泄漏及溢出的模拟,所以看不出来到底那块代码有问题,这个必须在多个时间段提出多个 Thread Dump信息,然后综合进行对比分析,单独分析一个文件是没有意义的。


作者:select you from me
来源:CSDN
转载请联系作者获得授权并注明出处。

你可能感兴趣的:(JVM高级特性与最佳实战)