Arthas-thread命令定位线程死锁
模拟死锁的场景
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命令定位线程死锁相关推荐
- java查询线程状态命令_JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息...
/* * Copyright (C) 2009 The doctor Authors * https://github.com/doctorwho1986 * * Licensed under the ...
- 20210519 使用jstack命令排查线程死锁问题
问题: 针对线上多线程死锁.阻塞,跑着跑着就卡住了:查看线上线程池的状态: jstack主要用于生成java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合 ...
- linux 跟踪命令执行过程,Linux的strace命令跟踪线程死锁
strace命令,是Linux提供的跟踪系统调用的命令,需要sudo或root权限,可以查看进程(线程)使用的系统调用. 基本用法:sudo strace -p 进程号 如果一个线程递归获取同一个锁, ...
- 线上频繁发生Full GC 如何调优?如何快速定位OOM、cpu飙升、线程死锁等问题
文章目录 1. jvm调优命令.工具介绍 ①:jps ②:jmap 查看应用中各实例生成情况 快速定位内存突然飙升导致的OOM异常 查看堆内存使用情况 ③:Jstack 检测线程死锁 快速定位导致cp ...
- 【Arthas】Arthas thread查看线程信息
1.概述 转载:Arthas thread查看线程信息 2.开篇 Arthas提供thread命令获取当前thread的信息,包括查询指定最忙的前N个线程并打印堆栈,找出当前阻塞其他线程的线程,显示所 ...
- gdb 笔记(11)— info 和 thread 命令(查看线程、切换线程)
info 命令是一个复合指令,还可以用来查看当前进程的所有线程运行情况. 下面以 redis-server 进程为例来演示一下,使用 delete 命令删掉所有断点,然后使用 run 命令重启一下 r ...
- java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单
目录: 一.Arthas 介绍 二.Arthas 使用场景 三.Arthas怎么使用 四.Arthas 定位性能问题 定位Java代码导致占用CPU高的问题 线程死锁 前言: 在做性能测试的过程中,当 ...
- jvm优化—监控工具:诊断内存泄露、cpu飙升、线程死锁、响应变慢
目录 一.jvm常见监控工具&指令 JVM常见参数 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 1. jps:jvm进程状况工具 2.jstat: jvm ...
- troubleshoot之:用control+break解决线程死锁问题
简介:如果我们在程序中遇到线程死锁的时候,该怎么去解决呢? 本文将会从一个实际的例子出发,一步一步的揭开java问题解决的面纱. 简介 如果我们在程序中遇到线程死锁的时候,该怎么去解决呢? 本文将会从 ...
最新文章
- LeetCode简单题之重新排列数组
- frome here on out
- linux下×××postfix
- C++基本入门资料搜集
- 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
- Visual Studio 2005中一个需要小改进的地方
- python linux教程_Linux for Python教程01
- 查看 chrome 浏览器中的 Headers
- 2.4时序卷积网络TCN:因果膨胀卷积、残差连接和跳过连接
- 吾智商低,对于VS的char实在是不知所云
- [Matlab] 二进制蝙蝠算法用于解决背包问题
- HSV空间改进的多尺度Retinex算法
- 数字图像处理-空间滤波
- CefSharp方法汇总
- 中国MES市场主流厂商及产品分析
- [CityHunter]点击ListView项目后修改其内容
- nginx 配置443端口
- 店铺小程序怎么做的?【小程序商城】
- 1002 图论专练 解题报告
- Ubuntu Server上如何安装Gi