java命令-jstack
jstack用于生产java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法
堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,比如线程间死锁、死循环、请求
外部资源导致长时间等待等。线程出现停顿的时候通过jstack命令可查看各个线程的调用堆栈
线程状态
new 未启动
runnable 在虚拟机内执行
blocked 阻塞并等待监视器锁
waiting 无限等待另一个线程执行特定操作
timed_waiting 有时限地等待另一个线程的特定操作
terminated 已退出
jstack使用简单示例(死锁情况模拟)
public class DeadLock {
public static void main(String[] args) {
//获取当前线程pid
System.out.println(ManagementFactory.getRuntimeMXBean().getName());
Thread t1 = new Thread(new DeadLockClass(true));
Thread t2 = new Thread(new DeadLockClass(false));
t1.start();
t2.start();
}
}
class DeadLockClass implements Runnable {
public boolean flag;
public DeadLockClass(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if(flag) {
while(true) {
synchronized (SuoObject.obj_1) {
System.out.println("obj_1" + Thread.currentThread().getName());
synchronized (SuoObject.obj_2) {
System.out.println("obj_2" + Thread.currentThread().getName());
}
}
}
}else {
while(true) {
synchronized (SuoObject.obj_2) {
System.out.println("obj_2" + Thread.currentThread().getName());
synchronized (SuoObject.obj_1) {
System.out.println("obj_1" + Thread.currentThread().getName());
}
}
}
}
}
}
class SuoObject {
static Object obj_1 = new Object();
static Object obj_2 = new Object();
}
根据打印出的线程pid, 使用jstack pid命令,即可出现如下如所示结果,死锁的信息一目了然!!!

java命令-jstack的更多相关文章
- java命令--jstack 工具【转载】
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- java命令--jstack 工具 查看JVM堆栈信息
介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项" ...
- java命令--jstack 工具
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- Java命令学习系列(二)——Jstack
Java命令学习系列(二)——Jstack 2015-04-18 分类:Java 阅读(512) 评论(0) jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚 ...
- java命令-(学习)jstack 工具
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- 学习 java命令
依稀记得自己第一次编译*.java文件,第一次运行*.class文件.但是六七年过去了,现在运行java写的程序更多的是用tomcat这种web容器.最近有个小需求,写一个监控zookeeper集群的 ...
- JAVA命令大全
1.java.exe:======================运行java程序,这个相信每一位用Java的人知道了. 2.javac.exe:======================编译的Ja ...
- Java命令学习系列(7):Javap(转)
原文出处: Hollis(@Hollis_Chuang) javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件 ...
- Java命令学习系列(零)——常见命令及Java Dump介绍
一.常用命令: 在JDK的bin目彔下,包含了java命令及其他实用工具. jps:查看本机的Java中进程信息. jstack:打印线程的栈信息,制作线程Dump. jmap:打印内存映射,制作堆D ...
随机推荐
- maven clean后 编译报错
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <config ...
- canvas 绘制二次贝塞尔曲线
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 前端每日实战:67# 视频演示如何用纯 CSS 创作单元素点阵 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/YvBvBr 可交互视频 此视频是可以 ...
- Hadoop搭建完全分布式
ubuntu系统下: https://blog.csdn.net/u014636511/article/details/80171002 centos系统下: https://blog.csdn.ne ...
- 【bzoj1458】士兵占领(最大流||有源汇最大流)
转载 http://hzwer.com/2963.html Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里 ...
- springboot下的多数据源切换
今天在考虑如果分公司也用系统了,怎么办,是单独的数据库,还是一起使用?所以就想到了切换数据源来实现,但是发现,只是读写分离,还要再改一下,根据用户地域来切换数据源,今天先照着例子做一下. 看了好多文章 ...
- [CSP-S模拟测试73]题解
A.小P的2048 作为一个看B哥玩了一个寒假的人这种题闭眼切好吧 模拟即可.程序模块化后直接复制粘贴. 说什么模拟不能复制粘贴的都没水平 #include<cstdio> #includ ...
- 二次封装arcgis的timeslider
arcgis的timeslider是对dojo slider二次封装,项目需要,所有Map用统一样式的slider,所以写了一个common的dojo class,统一调用生成slider,作为对ti ...
- php开发面试题---禁用cookie之后,如何使用session
php开发面试题---禁用cookie之后,如何使用session 一.总结 一句话总结: 在每个url后面自动加上PHPSESSID的值即可,用户禁止cookie后,服务器仍会将sessionId以 ...
- Map-Amap:货运解决方案
ylbtech-Map-Amap:货运解决方案 1.返回顶部 1. http://lbs.amap.com/smart/truck/ 2. 2.返回顶部 1. 2. 3.返回顶部 4.返回顶部 ...