• jstack跟踪Java堆栈信息


    1、简介

           jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具。线程快照一般被称为threaddump或者javacore文件,是当前Java虚拟机中每个线程正在执行的Java线程、虚拟机内部线程和可选的本地方法堆栈帧的集合。对于每个方法栈帧,将会显示完整的类名、方法名、字节码索引(bytecode index,BCI)和行号。生成的线程快照可以用于定位线程出现长时间停顿的原因,比如:线程间死锁、死循环、请求外部资源被长时间挂起等等。

    2、jstack命令参数

    命令语法:

    jstack [options] pid

    命令参数说明:

    option:jstack命令的可选参数。如果没有指定这个参数,jstack命令会显示Java虚拟机当前时刻的线程快照信息,如下图

    -F参数

    如果Java虚拟机进程由于进程挂起而没有任何响应,那么可以使用-F参数(仅在Oracle Solaris和Linux操作系统上游戏)强制显示线程快照信息。

    -l参数

    如果使用-l参数,除了方法栈帧以外,jstack命令还会显示关于锁的附加信息,比如属于java.util.concurrent的ownable synchronizers列表。

    -m参数

    如果使用-m参数,jstack命令将显示混合的栈帧信息,除了Java方法栈帧以外,还有本地方法栈帧。本地方法栈帧是C或C++编写的虚拟机代码或JNI/native代码。

    3、jstack 分析 CPU 问题

    top -Hp pid来找到 CPU 使用率比较高的一些线程

    将排在前面的线程 PID 转换成十六进制

    printf ‘%x\n’ pid得到 nid

    打印 Java 线程栈的信息

    jstack pid |grep ‘nid’ -C5 –color

    jstack 24076| grep 5e0d -A30
    • 2838:java 进程
    • 12c8:线程十六进制
    • -A30:打印 30 行

     

    • 包含:包名、类名、代码行信息,可以快速定位到某行代码导致该线程 CPU 使用率过高
    • jstack:JDK 自带命令

    当然更常见的是我们对整个 jstack 文件进行分析,通常我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用说了。我们可以使用命令

    cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
  • 相关阅读:
    linux tar 压缩解压缩
    JS获取图片上传地址
    ipython notebook
    docker build lnmp(未完成。。。)
    centos6.7 install chrome
    centos6.6 install
    centos 安装mysqldb 记录
    centos emacs安装
    第三周-第08章节-Python3.5-文件修改详解
    第三周-第06章节-Python3.5-文件读与写详解
  • 原文地址:https://www.cnblogs.com/uestc2007/p/16310310.html
Copyright © 2020-2023  润新知