什么是jstack
以下是百度百科的内容
jstack是java虚拟机自带的一种堆栈跟踪工具。
死锁
- FoundoneJava-leveldeadlock:
- =============================
- "Thread-1":
- waitingtolockmonitor0x0003f334(object0x22c19f18,ajava.lang.Object),
- whichisheldby"Thread-0"
- "Thread-0":
- waitingtolockmonitor0x0003f314(object0x22c19f20,ajava.lang.Object),
- whichisheldby"Thread-1" [2]
实例
package com.jdkTools;
/**
*简单的应用,供测试JDK自带的jstack使用 本应用会造成deadlock,可能会导致系统崩溃
*逻辑:一旦两个线程互相等待的局面出现,死锁(deadlock)就发生了
*
* @author范芳铭
*/
public class EasyJstack extends Thread {
private EasyJstackResourceresourceManger;//资源管理类的私有引用,通过此引用可以通过其相关接口对资源进行读写
private int a, b;//将要写入资源的数据
public static void main(String[]args) throws Exception {
EasyJstackResourceresourceManager = new EasyJstackResource();
EasyJstack stack1 = newEasyJstack(resourceManager, 1, 2);
EasyJstack stack2 = newEasyJstack(resourceManager, 3, 4);
stack1.start();
stack2.start();
}
publicEasyJstack(EasyJstackResource resourceManager, int a, int b) {
this.resourceManger =resourceManager;
this.a = a;
this.b = b;
}
public void run() {
while (true) {
this.resourceManger.read();
this.resourceManger.write(this.a,this.b);
}
}
}
package com.jdkTools;
/**
* @author范芳铭
*/
public class EasyJstackResource {
/**
*管理的两个资源,如果有多个线程并发,那么就会死锁
*/
private Resource resourceA = newResource();
private Resource resourceB = newResource();
public EasyJstackResource() {
this.resourceA.setValue(0);
this.resourceB.setValue(0);
}
public int read() {
synchronized (this.resourceA){
System.out.println(Thread.currentThread().getName()
+ "线程拿到了资源 resourceA的对象锁");
synchronized (resourceB){
System.out.println(Thread.currentThread().getName()
+ "线程拿到了资源 resourceB的对象锁");
return this.resourceA.getValue()+ this.resourceB.getValue();
}
}
}
public void write(int a, int b) {
synchronized (this.resourceB){
System.out.println(Thread.currentThread().getName()
+ "线程拿到了资源 resourceB的对象锁");
synchronized(this.resourceA) {
System.out.println(Thread.currentThread().getName()
+ "线程拿到了资源 resourceA的对象锁");
this.resourceA.setValue(a);
this.resourceB.setValue(b);
}
}
}
public class Resource {
private int value;//资源的属性
public int getValue() {
return value;
}
public void setValue(intvalue) {
this.value = value;
}
}
}
分析和结果
什么是jstack的更多相关文章
- 【java】jstack
介绍 jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jsta ...
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎 ...
- jstack+top定位性能问题
定位性能问题,尤其是cpu使用率过高时,经常需要查找cpu消耗较高的线程,然后查看其堆栈,从而进入代码定位问题. 该场景下, jstack+top是一种非常经典的方式. jstack+top: 1 ...
- jstack工具查看系统线程问题
背景: 最近在做项目系统的异常测试,项目依赖于nkv,需要模拟依赖组件nkv异常时系统的响应及性能情况.通过tc工具模拟当服务器发送到nkv的请求超时时系统的响应.发现接口返回错误率100%,查看服务 ...
- 使用jstack分析cpu消耗过高的问题
我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2 18 ...
- Jstack Jmap jstat
jstack jmap jstat 代码,这里以这个为例怎样使用jstack诊断Java应用程序故障 public class DeadLock { public static void main(S ...
- Win下,通过Jstack截取Java进程中的堆栈信息
在Java软件的使用过程中,有时会莫名的出现奇怪的问题.而这些问题常常无法使用日志信息定位,这时我们就需要通过查看进程内部线程的堆栈调用关系来分析问题出在哪里. 举个例子,当我们在做某个操作时,莫名的 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
- java jstack命令详解
名称jstack: stack trace 摘要: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] ...
- jstack简单使用,定位死循环、线程阻塞、死锁等问题
当我们运行java程序时,发现程序不动,但又不知道是哪里出问题时,可以使用JDK自带的jstack工具去定位: 废话不说,直接上例子吧,在window平台上的: 死循环 写个死循环的程序如下: pac ...
随机推荐
- 第一百五十五节,封装库--JavaScript,轮播器
封装库--JavaScript,轮播器 html <div id="banner"> <img src="img/banner1.jpg" a ...
- Android将指定的.class打包到mainDex中
1️⃣ 我们分包的时候会遇到一个问题,因为加载和初始化的问题,如果某个类不在mainDex中,那么程序就会报错,java.lang.NoClassDefFoundError. 2️⃣ 在gradle中 ...
- [翻译]创建ASP.NET WebApi RESTful 服务(11)
本章介绍通过使用Ali Kheyrollahi开发的CacheCow来实现服务器端的缓存.所有代码现在都可以在GitHub上下载. 我们将要实现的缓存方式叫做Conditional Requests, ...
- ChemDraw绘制苯甲酸钠的生成反应式的方法
苯甲酸钠是苯甲酸的钠盐,就用途来说苯甲酸主要用于制作杀真菌剂,苯甲酸钠则是用于食物或软饮料中的主要商品防腐剂,其防腐最佳PH是2.5-4.0,苯甲酸钠的亲油性也很大,易穿透细胞膜进入细胞体内.苯甲酸钠 ...
- SQLAllocStmt与SQLFreeStmt
1.申请语句句柄 SQLAllocStmt函数为应用程序分配语句句柄,其格式为:RETCODE SQLAllocStmt(HDBC hdbc, HSTMT FAR * phstmt) 其中, hdbc ...
- Webservice工作原理及实例
Web Service工作原理及实例 一.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者In ...
- 【Redis】redis分页查询理解
偶然在代码中发现一个接口,接口定义说是分页查询,但逻辑实现是Redis.不太理解,Redis怎么分页?后来看到一篇文章,然后了解了. 1.Zrevrange实现 通过SortedSet的zrevran ...
- delphi--自带控件(Tcheckbox、TComBobox、TpageControl、TDBGrid,TScrollBox,TEdit)
一.TCheckBox 使CheckBox选中CheckBox1.Checked := True;选择发生变化 ,OnClick事件if CheckBox1.Checked thenbegin //. ...
- Go语言的一些资料汇总
1. 8分钟了解你为什么应该学习Go语言 https://www.bilibili.com/video/av45561733/ 2.手把手教你从零开始搭建Go语言开发环境 https://www.bi ...
- The 12 Months of the Year