jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。

如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jstack [-l] pid

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。

另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

需要注意的问题:

l 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。

l 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。

2、命令格式

$jstack [ option ] pid

$jstack [ option ] executable core

$jstack [ option ] [server-id@]remote-hostname-or-IP

参数说明:

pid: java应用程序的进程号,一般可以通过jps来获得;

executable:产生core dump的java可执行程序;

core:打印出的core文件;

remote-hostname-or-ip:远程debug服务器的名称或IP;

server-id: 唯一id,假如一台主机上多个远程debug服务;

示例:

$jstack –l 23561

线程分析:

一般情况下,通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。

l jvm线程:

在线程中,有一些 JVM内部的后台线程,来执行譬如垃圾回收,或者低内存的检测等等任务,这些线程往往在JVM初始化的时候就存在,如下所示:

1 "Attach Listener" daemon prio=10 tid=0x0000000052fb8000 nid=0xb8f waiting on condition [0x0000000000000000]2

3 java.lang.Thread.State: RUNNABLE4

5

6

7 Locked ownable synchronizers:8

9 -None10

11 destroyJavaVM" prio=10 tid=0x00002aaac1225800 nid=0x7208 waiting on condition [0x0000000000000000]

12

13 java.lang.Thread.State: RUNNABLE14

15

16

17 Locked ownable synchronizers:18

19 - None

l 用户级别的线程

还有一类线程是用户级别的,它会根据用户请求的不同而发生变化。该类线程的运行情况往往是我们所关注的重点。而且这一部分也是最容易产生死锁的地方。

1 "qtp496432309-42" prio=10 tid=0x00002aaaba2a1800 nid=0x7580 waiting on condition [0x00000000425e9000]2

3 java.lang.Thread.State: TIMED_WAITING (parking)4

5 at sun.misc.Unsafe.park(Native Method)6

7 - parking to wait for <0x0000000788cfb020>(a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)8

9 at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)10

11 at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)12

13 at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:320)14

15 at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:479)16

17 at java.lang.Thread.run(Thread.java:662)18

19

20

21 Locked ownable synchronizers:22

23 - None

从上述的代码示例中我们可以看到该用户线程的以下几类信息:

Ø 线程的状态:waiting on condition(等待条件发生)

Ø 线程的调用情况;

Ø 线程对资源的锁定情况;

linux 使用jstack_Linux jstack命令详解相关推荐

  1. linux ps(process status) 命令详解

    linux ps(process status) 命令详解 功能说明:报告程序状况. 语 法:ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名称> ...

  2. Linux操作系统上lsof命令详解

    Linux操作系统上lsof命令详解 2011-10-08 18:31:31 http://xjsunjie.blog.51cto.com/999372/682865 标签:Linux lsof命令 ...

  3. linux slocate(secure locate) 命令详解

    linux slocate(secure locate) 命令详解 功能说明:查找文件或目录. 语 法:slocate [-u][--help][--version][-d <目录>][查 ...

  4. Linux上的free命令详解

    Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上f ...

  5. linux cut命令学习,Linux中的cut 命令详解

    今天小编要跟大家分享的文章是关于Linux中的cut 命令详解.cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串 ...

  6. linux磁盘分区fdisk命令详解及云硬盘挂载实操

    linux磁盘分区fdisk命令详解 1.什么是分区? 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用.分区表是一个硬盘分区的索引,分区的信息都会写进分区表. ...

  7. LINUX经常使用的命令详解

    LINUX经常使用的命令详解 源地址:http://blog.itpub.net/29065182/viewspace-1189162/ 1.man 对你熟悉或不熟悉的命令提供帮助解释  eg:man ...

  8. avast! for linux/unix servers,最常见的Linux/Unix监控工具vmstat命令详解

    最常见的Linux/Unix监控工具vmstat命令详解 vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率.内存使用.虚拟内存交换 ...

  9. Ubuntu (Linux) 系统 find 命令详解

    Ubuntu (Linux) 系统 find 命令详解 在Ubuntu (Linux)系统的终端上,虽然没有像 windows 上那样简介易用的图形界面 搜索工具,但只要你使用足够熟练, 有一个强大命 ...

最新文章

  1. MS SQL SERVER2005 分页存储过程
  2. 洛谷 P1985 翻转棋
  3. 启用物料账后,有两种物料价格确定方式
  4. java自学方法_JAVA自学 方法
  5. [WPF系列]-Deep Zoom
  6. jQuery零基础入门——(三)层级选择器
  7. Linux命令:SAMBA配置与win10共享
  8. 通过hsv筛选颜色 python_OpenCV-Python 光流介绍(附代码)
  9. 2018-1-24(转)游戏策划案也有“套路”?
  10. Mac 安装Yarn
  11. php什么是耦合关系,什么是耦合
  12. 全球及中国汽车节能减排行业投资可行性及十四五发展趋势研究报告2021-2027年
  13. iOS和Android和H5交互WebViewJavascriptBridge
  14. 【C++】STL简介
  15. java里面逗号分隔的字符串转list
  16. 在公众号文章中添加**人员名单
  17. matlab定义未知大小矩阵,MATLAB中未知长度的矩阵?
  18. qtabwidget 高度_QStyle Tabs QTabWidget QTabBar样式设计 (十)
  19. 微普年薪10W版C语言教学视频
  20. 修复win7无法启动

热门文章

  1. 兵团职称评审计算机,兵团人社局下发通知 加强职称制度体系建设
  2. 软件工程导论——4系统设计
  3. 计算机网络基础小抄,自考计算机网络技术基础小抄.doc
  4. 山东大妈开饺子馆,套路太牛了,一年狂赚180万,生意人都来学学
  5. MathType公式对齐不正确
  6. Shell中的until用法
  7. java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...
  8. Android应用安全现状与解决方案(学习资料)
  9. Python学习笔模式匹配与正则表达式之组合使用re.IGNORECASE、re.DOTALL和re.VERBOSE
  10. 如何选择MySQL的备份工具