什么是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 ...
随机推荐
- win10执行shell脚本
我们在win10如何执行以.sh文件的脚本呢? 开发步骤:1.写脚本b2q_goods.sh #!/bin/bashsql="select * from b2q.goods where go ...
- (转)java并发对象锁、类锁、私有锁
转自:http://ifeve.com/java-locks/ 建议参考:http://www.zhihu.com/question/28113814 Java类锁和对象锁实践 感谢[jiehao]同 ...
- ajax利用html5新特性带进度条上传文件
http://blog.csdn.net/pkgray/article/details/27591283 http://www.matlus.com/html5-file-upload-with-pr ...
- apache的ab命令做压力测试
1. 最基本的关心两个选项 -c -n 例: ./ab -c 100 -n 10000 http://127.0.0.1/index.php -c 100 即:每次并发100个-n 10000 即: ...
- Microsoft Visual C++ 2005 Redistributable---win下安装软件“嘭”的一声报错!
今天下了个MindManager,正准备安装结果出现了如题的错误提示!!! 于是百度/google一下,在权威的微软官网下找到了答案,他妈的,看了之后表示很无奈 If the non unicode ...
- Android网络框架-Volley实践 使用Volley打造自己定义ListView
这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影 ...
- 怎样使用Intent传递对象
怎样使用Intent传递对象 我们能够使用Intent来启动Activity.开启服务Service,发送广播Broadcast,然后使用Intent传递主要的数据类型,如:布尔值,整型,字符串等 I ...
- Android中使用OnClickListener接口实现button点击的低级失误
今天写了几行极为简单的代码,就是想implements View.OnCLickListener.然后实现按钮点击操作.可是按钮却没有反应.找了五分钟还是没有结果. 下面是我的代码,希望大家不要嘲笑 ...
- 总结OpenvSwitch的调试经验
相信相信不少人在开始用OpenvSwitch(以下简称OVS)或者修改源码的时候,都不知道如何去调试,根据我的学习历程以及从网上搜集的资料做一个汇总. 一. 个人经验 从网上找相关资料,熟悉Openv ...
- iOS 修改状态栏颜色
1.首先,苹果把UIViewControllerBasedStatusBarAppearance默认的值设为YES,是有他的道理的,新系统下,苹果希望我们的viewcontroller去控制statu ...