登录 注册写文章
首页下载APP
image
image
广告
评论0 赞15 15赞16赞 赞赏
jvm 性能调优工具之 jstack
jijs关注赞赏支持jvm 性能调优工具之 jstack
概述
jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。
Jstack 用法
image
参数说明:
-
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent 的 ownable synchronizers列表.
-
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-
-m 打印java和native c/c++框架的所有栈信息.
-
-h | -help 打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询.
Jstack 使用
通过使用 jps 命令获取需要监控的进程的pid,然后使用 jstack pid 命令查看线程的堆栈信息。
image
通过 jstack 命令可以获取当前进程的所有线程信息。
每个线程堆中信息中,都可以查看到 线程ID、线程的状态(wait、sleep、running 等状态)、是否持有锁信息等。
死锁示例
下面通过一个例子,来演示 jstack 检查死锁的一个例子,代码如下:
public static void deathLock() {
Thread t1 = new Thread() {
@Override
public void run() {
try {
lock1.lock();
TimeUnit.SECONDS.sleep(1);
lock2.lock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread t2 = new Thread() {
@Override
public void run() {
try {
lock2.lock();
TimeUnit.SECONDS.sleep(1);
lock1.lock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.setName("mythread1");
t2.setName("mythread2");
t1.start();
t2.start();
}
使用 jstack -l pid 查看线程堆栈信息,发现在堆栈信息最后面检查出了一个死锁。如下图
可以清楚的看出 mythread2 等待 这个锁 “0x00000000d6eb82d0”,这个锁是由于mythread1线程持有。
mythread1线程等待这个锁“0x00000000d6eb8300”,这个锁是由mythread2线程持有。
“mythread1”线程堆栈信息如下:
可以看出当前线程持有“0x00000000d6eb82d0”锁,等待“0x00000000d6eb8300”的锁
“mythread2”线程堆栈信息如下:
“mythread2”的堆栈信息中可以看出当前线程持有“0x00000000d6eb8300”锁,等待“0x00000000d6eb82d0”的锁。
个人微信公众号:
推荐阅读更多精彩内容
- Java面试宝典Beta5.0 pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 ... 王震阳阅读 72,305评论 25 赞 503
- Tomcat性能调优-JVM监控与调优(转) 参数设置 在Java虚拟机的参数中,有3种表示方法用“ps -ef |grep "java"命令,可以得到当前Ja... 九问阅读 6,405评论 2 赞 50
- Java常用命令及性能调优工具 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、L... 唐影若凡阅读 1,537评论 0 赞 9
- JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解 转自:https://my.oschina.net/feichexia/blog/196575 摘要: JDK本身... 鲸息_Leon阅读 710评论 0 赞 14
- JVM性能监控工具 jps USAGE: jps [-help] jps [-q] [-mlvV] [<hostid>] OPTI... 荣儿飞阅读 82评论 0 赞 1
广告
评论0 赞15 15赞16赞 赞赏