模拟死锁的场景

public class Deadlock {private static Object obj1 = new Object();private static Object obj2 = new Object();public static void main(String[] args) {new Thread(() -> {System.out.println("线程1执行");synchronized (obj1) {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}synchronized (obj2) {}}}, "t1").start();new Thread(() -> {System.out.println("线程2执行");synchronized (obj2) {synchronized (obj1) {}}}, "t2").start();System.out.println("执行完毕");}
}

通过thread命令定位

1,直接使用”thread“命令,输出线程统计信息。其中:BLOCKED 表示目前阻塞的线程数。
[arthas@11596]$ threadThreads Total: 26, NEW: 0, RUNNABLE: 8, BLOCKED: 2, WAITING: 4, TIMED_WAITING: 2, TERMINATED: 0, Internal threads: 10
ID   NAME                          GROUP          PRIORITY  STATE    %CPU      DELTA_TIM TIME      INTERRUPT DAEMON
2    Reference Handler             system         10        WAITING  0.0       0.000     0:0.000   false     true
3    Finalizer                     system         8         WAITING  0.0       0.000     0:0.000   false     true
4    Signal Dispatcher             system         9         RUNNABLE 0.0       0.000     0:0.000   false     true
5    Attach Listener               system         5         RUNNABLE 0.0       0.000     0:0.031   false     true
14   arthas-timer                  system         5         WAITING  0.0       0.000     0:0.015   false     true
17   arthas-NettyHttpTelnetBootstr system         5         RUNNABLE 0.0       0.000     0:0.015   false     true
18   arthas-NettyWebsocketTtyBoots system         5         RUNNABLE 0.0       0.000     0:0.015   false     true
19   arthas-NettyWebsocketTtyBoots system         5         RUNNABLE 0.0       0.000     0:0.015   false     true
20   arthas-shell-server           system         5         TIMED_WA 0.0       0.000     0:0.000   false     true
21   arthas-session-manager        system         5         TIMED_WA 0.0       0.000     0:0.000   false     true
22   arthas-UserStat               system         5         WAITING  0.0       0.000     0:0.000   false     true
24   arthas-NettyHttpTelnetBootstr system         5         RUNNABLE 0.0       0.000     0:0.109   false     true
25   arthas-command-execute        system         5         RUNNABLE 0.0       0.000     0:0.015   false     true
10   t1                            main           5         BLOCKED  0.0       0.000     0:0.000   false     false
11   t2                            main           5         BLOCKED  0.0       0.000     0:0.000   false     false
12   DestroyJavaVM                 main           5         RUNNABLE 0.0       0.000     0:0.156   false     false

2,执行“thread -b”命令,找出当前阻塞其他线程的线程,即造成死锁的罪魁祸首

[arthas@11596]$ thread -b"t1" Id=10 BLOCKED on java.lang.Object@26dee7d7 owned by "t2" Id=11at test.Deadlock.lambda$main$0(Deadlock.java:24)-  blocked on java.lang.Object@26dee7d7-  locked java.lang.Object@13a631ce <---- but blocks 1 other threads!at test.Deadlock$$Lambda$1/250421012.run(Unknown Source)at java.lang.Thread.run(Thread.java:748)

注:上面这个命令直接输出了 造成死锁的线程ID,和具体的代码位置,以及当前线程一共阻塞的线程数量:“<—- but blocks 1 other threads!“。

3,其他线程命令:

thread –all, 显示所有的线程;
thread id, 显示指定线程的运行堆栈;
thread –state:查看指定状态的线程,如:thread –state BLOCKED;
thread -n 3:展示当前最忙的前N个线程并打印堆栈;

Arthas-thread命令定位线程死锁相关推荐

  1. java查询线程状态命令_JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息...

    /* * Copyright (C) 2009 The doctor Authors * https://github.com/doctorwho1986 * * Licensed under the ...

  2. 20210519 使用jstack命令排查线程死锁问题

    问题:  针对线上多线程死锁.阻塞,跑着跑着就卡住了:查看线上线程池的状态: jstack主要用于生成java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合 ...

  3. linux 跟踪命令执行过程,Linux的strace命令跟踪线程死锁

    strace命令,是Linux提供的跟踪系统调用的命令,需要sudo或root权限,可以查看进程(线程)使用的系统调用. 基本用法:sudo strace -p 进程号 如果一个线程递归获取同一个锁, ...

  4. 线上频繁发生Full GC 如何调优?如何快速定位OOM、cpu飙升、线程死锁等问题

    文章目录 1. jvm调优命令.工具介绍 ①:jps ②:jmap 查看应用中各实例生成情况 快速定位内存突然飙升导致的OOM异常 查看堆内存使用情况 ③:Jstack 检测线程死锁 快速定位导致cp ...

  5. 【Arthas】Arthas thread查看线程信息

    1.概述 转载:Arthas thread查看线程信息 2.开篇 Arthas提供thread命令获取当前thread的信息,包括查询指定最忙的前N个线程并打印堆栈,找出当前阻塞其他线程的线程,显示所 ...

  6. gdb 笔记(11)— info 和 thread 命令(查看线程、切换线程)

    info 命令是一个复合指令,还可以用来查看当前进程的所有线程运行情况. 下面以 redis-server 进程为例来演示一下,使用 delete 命令删掉所有断点,然后使用 run 命令重启一下 r ...

  7. java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

    目录: 一.Arthas 介绍 二.Arthas 使用场景 三.Arthas怎么使用 四.Arthas 定位性能问题 定位Java代码导致占用CPU高的问题 线程死锁 前言: 在做性能测试的过程中,当 ...

  8. jvm优化—监控工具:诊断内存泄露、cpu飙升、线程死锁、响应变慢

    目录 一.jvm常见监控工具&指令 JVM常见参数 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 1. jps:jvm进程状况工具 2.jstat: jvm ...

  9. troubleshoot之:用control+break解决线程死锁问题

    简介:如果我们在程序中遇到线程死锁的时候,该怎么去解决呢? 本文将会从一个实际的例子出发,一步一步的揭开java问题解决的面纱. 简介 如果我们在程序中遇到线程死锁的时候,该怎么去解决呢? 本文将会从 ...

最新文章

  1. LeetCode简单题之重新排列数组
  2. frome here on out
  3. linux下×××postfix
  4. C++基本入门资料搜集
  5. 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
  6. Visual Studio 2005中一个需要小改进的地方
  7. python linux教程_Linux for Python教程01
  8. 查看 chrome 浏览器中的 Headers
  9. 2.4时序卷积网络TCN:因果膨胀卷积、残差连接和跳过连接
  10. 吾智商低,对于VS的char实在是不知所云
  11. [Matlab] 二进制蝙蝠算法用于解决背包问题
  12. HSV空间改进的多尺度Retinex算法
  13. 数字图像处理-空间滤波
  14. CefSharp方法汇总
  15. 中国MES市场主流厂商及产品分析
  16. [CityHunter]点击ListView项目后修改其内容
  17. nginx 配置443端口
  18. 店铺小程序怎么做的?【小程序商城】
  19. 1002 图论专练 解题报告
  20. Ubuntu Server上如何安装Gi

热门文章

  1. 服务器虚拟多个终端,虚拟化终端新主流 支持多操作系统
  2. H5网页元素和全局属性
  3. Vue+element ui表单中省市区级联选择—v-distpicker/Cascader
  4. Linux:根文件系统构建
  5. 计算机色温调整,如何调节计算机屏幕的色温
  6. 研华板卡1742U--瞬时读值 用 instantAiCtrl1 控件
  7. 《软技能-代码之外的生存指南》学习笔记之理财篇
  8. 计算机服务器排名,2019服务器CPU天梯图 多路CPU性能排名
  9. 标准ACL,扩展ACL
  10. 树莓派系统剪裁、克隆