`
wbj0110
  • 浏览: 1587974 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

How to get thread dump in linux using jstack

阅读更多

A thread dump is a list of all the Java threads that are currently active in a Java Virtual Machine (JVM). There  are several ways to take thread dumps from a JVM. It is highly recommended to take more than 1 thread dump while analyzing any problem such as deadlock or resource usage analysis. It is always better to confirm in more than one thread dump then making conclusions in single attempt.

Step 1) Get the PID of your java process

The first piece of information you will need to be able to obtain a thread dump is your java process’s PID.

The java JDK ships with the jps command which lists all java process ids. You can run this command like this:

jps -l

Remember, you may have to run this command as sudo -u jps -l, where “user” is the username of the user that the java process is running as.
Even now, if you are not able to find out process id, use below command:

ps -aef | grep java

Step 2) Request a Thread Dump from the JVM

If installed/available, we recommend using the jstack tool. It prints thread dumps to the command line console.

To obtain a thread dump using jstack, run the following command:

jstack

You can output consecutive thread dumps to a file by using the console output redirect / append directive:

jstack  >> threaddumps.log

Important points

  1. The jstack tool is available since JDK 1.5.
  2. jstack works even if the -Xrs jvm parameter is enabled.
  3. It’s not possible to use the jstack tool from JDK 1.6 to take threaddumps from a process running on JDK 1.5.

Thread dump sampling in fixed time intervals using jstack script

This simple shell script takes several jstack snapshots in fixed time intervals: [Reference document]

#!/bin/bash

if [ $# -eq 0 ]; then
    echo >&2 "Usage: jstackSeries  [  [  ] ]"
    echo >&2 "    Defaults: count = 10, delay = 1 (seconds)"
    exit 1
fi

pid=$1          # required
count=${2:-10}  # defaults to 10 times
delay=${3:-1} # defaults to 1 second

while [ $count -gt 0 ]
do
    jstack $pid >jstack.$pid.$(date +%H%M%S.%N)
    sleep $delay
    let count--
    echo -n "."
done

Use above script like this:

jstackSeries  10 5

How to compare the thread dumps

To compare the results you may use interactive diff viewers, e.g.

vimdiff file1 file2 file3 file4 # up to 4 files

Another way to see what parts of the jstack trace are changing over time is to compare adjacent jstack trace using context diff (-c option):

d_old=""
for d in jstack.13585.12171*
do
  if [ -n "$d_old" ]
  then
    diff -c "$d_old" "$d"
  fi
  d_old="$d"
done

Here, the result shows only the places where the jstack trace changes from file to file.

分享到:
评论

相关推荐

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    Jstack分析工具——IBM Thread and Monitor Dump Analyzer for Java

    需要本地安装JDK并配置JAVA环境变量。 之后使用java -jar jca469.jar即可打开工具。 直接将dump出来的堆栈信息,打开,便可分析。

    java thread dump 分析

    其中,`jstack` 命令是一个 Java 命令行工具,用于生成 Thread Dump。 在 Unix 系统中,可以使用 `kill -3 <pid>` 命令来获取 Thread Dump,其中 `<pid>` 是 JVM 进程的进程 ID。在 Windows 系统中,可以按下 CTRL+...

    jstack生成的Thread Dump日志1

    【标题】:深入解析jstack生成的Thread Dump日志 【描述】:jstack命令用于生成Java应用程序的线程堆栈跟踪,它可以帮助开发者诊断Java应用中的线程问题。线程Dump日志提供了详细的线程状态和调用栈信息,这对于...

    jstack生成的Thread Dump日志.docx

    JVM提供了一个强大的工具——`jstack`,用于生成线程堆栈转储,即Thread Dump,帮助开发者洞察线程的运行状态,识别性能瓶颈或死锁等问题。本文将详细探讨Thread Dump中的线程状态,以及如何分析和解决相关问题。 1...

    如何通过jstack命令dump线程信息

    `jstack`命令是Java开发中用于诊断线程堆栈信息的重要工具,它可以帮助开发者了解Java应用程序的线程状态,包括运行、等待、阻塞等,以及是否存在死锁等问题。当遇到性能问题或者线程卡住不前时,`jstack`能提供关键...

    Java thread dump analyzer (tda)

    Java线程分析工具(TDA)是一款专为Java开发者设计的强大工具,用于解析和理解Java应用程序的线程转储(thread dump)。线程转储是Java虚拟机(JVM)在特定时刻生成的一种快照,其中包含了应用程序中所有活动线程的状态...

    tda看ThreadDump文件

    而`tda`(Thread Dump Analyzer)则是对`jstack`生成的Thread Dump文件进行分析和可视化的一款优秀工具。 1. **jstack**: - **功能**:`jstack`主要用于诊断Java应用的线程堆栈信息,它能够显示每个线程的详细...

    Windbg分析dump及Linux调试程序使用方案

    ### Windbg分析dump及Linux调试程序使用方案 #### Windows下的Windbg分析dump及调试程序 **Windbg**是Microsoft提供的一款强大的调试工具,主要用于Windows环境下应用程序的调试与故障诊断。它支持用户模式和内核...

    linux coredump分析方法实例介绍

    Linux Core Dump 分析方法实例介绍 本文将通过实例来介绍 Linux 中如何进行 Core Dump 分析,解决死机问题。 一、Core Dump 介绍 Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态...

    IBM thread dump文件分析工具

    在Java虚拟机(JVM)的运行过程中,有时会出现性能问题或者系统挂起的情况,这时候我们需要深入了解线程的运行状态,这就是"IBM thread dump文件分析工具"的作用所在。线程dump文件是JVM在特定时刻生成的一种快照,...

    Linux下生成core dump

    ### Linux下生成Core Dump详解 #### 一、Core Dump简介 在Linux环境下,当一个程序因为某种原因(如段错误)而崩溃时,系统可以自动为该程序创建一个名为“core dump”的文件。这个文件包含了程序崩溃时内存的快照...

    IBM Thread Dump Analyzer

    IBM 线程堆栈分析工具,IBM Thread and Monitor Dump Analyzer for java

    java 内存dump分析和thread dump(java core)分析

    4. **Async Debugging in IntelliJ IDEA / Eclipse**:集成开发环境也提供了查看和分析Thread Dump的功能,便于开发过程中实时调试。 在分析过程中,通常会关注以下关键指标: - **内存分配情况**:查看是否有大量...

    java故障排查ThreadDump

    - 使用JDK自带的`jstack`工具:通过命令行执行`jstack <pid>`,其中`pid`是Java进程的ID,可以得到应用程序的Thread Dump。 - 异常触发:某些情况下,连续三次按下Ctrl+Break(Windows)或Ctrl+\(Unix/Linux)...

    TDA - Thread Dump Analyzer 2.3.2

    《TDA - Thread Dump Analyzer 2.3.2:洞察Java线程问题的利器》 在Java应用程序的运行过程中,线程问题是常见的性能瓶颈和稳定性隐患。为了有效地诊断和解决这些问题,开发者通常需要借助线程转储(Thread Dump)...

    JStack和Java Thread Dumps分析

    ### JStack和Java Thread Dumps分析 #### 一、引言 在Java应用程序开发与维护过程中,时常会遇到性能瓶颈或死锁等问题。这些问题往往难以定位,尤其当系统处于高负载下时,更是如此。此时,`JStack`工具便显得尤为...

    Thread Dump Analyzer

    **线程Dump分析器(Thread Dump Analyzer)** 线程Dump分析器,简称TDA,是一款专业工具,专门设计用于解析和分析Java应用程序的线程转储(Thread Dump)文件。线程转储是在特定时间点应用程序中所有线程的状态快照...

    Thread Dump导出脚本thread.sh

    Thread Dump导出脚本,执行./thread.sh <pid>

    Accelerated Linux Core Dump Analysis

    Linux Core Dump 权威书籍

Global site tag (gtag.js) - Google Analytics