jstack命令:教你如何排查多线程问题

这是之前的一个死锁案例:

一个多线程死锁案例,如何避免及解决死锁问题?

如程序中发生这样的死锁问题该如何排查呢?我们可以使用java自带的jstack命令进行排查。

1、先在服务器运行上面的死锁的例子,让程序陷入死锁。

2、使用jps、ps -ef | grep java查看当前java进程的pid,严重情况下可以使用top命令查看当前系统cpu/内存使用率最高的进程pid。

这里我们的死锁的pid是:3429,这里程序很简单,虽然程序死锁,没有占用很多资源。

3、使用top -Hp 3429命令查看进程里面占用最多的资源的线程。

这里我们看到的占用最多资源的线程是:3440。

4、使用命令printf "%x\n" 3440 把线程pid转换成16进制数,得到:d70。

5、使用jstack 3429 | grep -20 d70命令查询该线程阻塞的地方。

到这里就基本跟踪完毕,去代码所在行看看为什么死锁吧。

jstack更多详细用法可以查看官方说明:

http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html

原文发布于微信公众号 - Java技术栈(javastack)

原文发表时间:2017-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web编程技术分享

【php增删改查实例】第十九节 - session的使用: 让服务器知道你是谁?

21250
来自专栏linux系统运维

rsync通过服务同步,linux系统日志,screen工具

22840
来自专栏大数据-Hadoop、Spark

Linux更换jdk版本,java -version还是原来的版本JDK还是之前的版本

安装JDK 1.上传jdk-7u80-linux-x64.tar.gz到Linux上 2.解压jdk到/usr/local目录 tar -zxvf jdk-...

48770
来自专栏Python攻城狮

Python开发环境搭建1.下载及安装2.一台PC安装多个python版本3.python2和python3版本共存的配置4. pip安装模块时执行的命令5.给python安装第三方模块6.查看pip

现在python3是趋势,很多公司已经逐渐使用python3,但是对于爬虫来说,我们现在仍需用2.7,所以现在我们安装Python2.7.9版本

11930
来自专栏小二的折腾日记

服务器-Nginx模块化结构

习惯上将Nginx分为:核心模块、标准模块、可选HTTP模块、邮件服务模块和第三方模块五大类。

8620
来自专栏雨过天晴

原 CentOS(亚马逊EC2,亚马逊班)

16530
来自专栏我和PYTHON有个约会

04.多版本Python共存的配置和使用

但是由于工作需要,我们的个人PC上可能需要多个python版本共存,应该进行什么样的设置呢,本章内容就针对这个问题进行分析和使用的介绍

11110
来自专栏程序猿

Windows环境Java开发环境搭建

本文讲解在Windows操作系统下如何搭建Java环境变量。 一、首先下载JDK安装包。 二、安装。 三、配置Java环境变量。 四、运行CMD测试是否安装成功...

40950
来自专栏青青天空树

linux下安装nodejs及npm

官网下载npm安装包,https://nodejs.org/en/,左边是稳定版右边是最新版。

20620
来自专栏惨绿少年

OpenSUSE 服务器系统部署

1、准备 1.1 下载系统 下载地址:https://software.opensuse.org/distributions/leap     目前的最新版本为...

46570

扫码关注云+社区

领取腾讯云代金券