Java“魔法”-jstack命令解析

怕什么真理无穷进一步有近一步的欢喜前情预告在介绍jstack之前,先简单介绍一下jps。因为jps使用相对简单,各位看官看一下便知。jps的作用是显示当前系统的java进程情况,及其id号…

大家好,又见面了,我是全栈君。

怕什么真理无穷

进一步有近一步的欢喜

Java“魔法”-jstack命令解析

Java“魔法”-jstack命令解析

前情预告

在介绍jstack之前,先简单介绍一下jps。因为jps使用相对简单,各位看官看一下便知。

jps的作用是显示当前系统的java进程情况,及其id号。jps是【进程查询】魔法。

Java进程Id的查询也可以使用如:

ps -ef | grep java

需说明一下:jps仅查找当前用户的Java进程,而不是当前系统中的所有进程。

常用命令:

# 查看 java 进程,显示 pid,完整包名以及 main 函数参数
jps -ml
# 查看Java进程对应的给JVM的参数
jps -v
# 根据 name 查找 java 进程
jps -mlvV | grep <name>
# 根据 name 查找 pid
jps | grep <name>

举个示例:

jps -lm

Java“魔法”-jstack命令解析

jps -lv

Java“魔法”-jstack命令解析

lv:要记住哈~ 到这里jps也就告一段落了,下面正式开始jstack的内容。

jstack介绍

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)。

命令说明

官网文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html


Usage:
    jstack [-l] <pid>
        (to connect to running process) 连接活动线程
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process) 连接阻塞线程
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file) 连接dump的文件
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server) 连接远程服务器

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

在使用jstack之前需要先大概知道线程的状态相关的知识,下面为你准备好了。

线程状态

线程在运行的过程中,会在几种状态中进行切换,我们可以用jstack命令查看线程堆栈信息时,可能会看到的线程的几种状态,了解这些线程的状态,方便后续对于具体问题的排查和解决。

  • NEW :未启动的。不会出现在Dump中

  • RUNNABLE :在虚拟机中准备执行的

  • BLOCKED :阻塞并等待监视器锁

  • WATING :无限期等待另一个线程执行特定操作

  • TIMED_WATING :有时限的等待另一个线程的特定操作

  • TERMINATED :已退出的,线程终止

jstack输出日志

知道要查询应用的PId,就可以使用jstack 输出线程的信息。

# 输出结果  
jstack -l pid    
#输出结果到日志中
jstack -l pid > /tmp/jstack.log 

大致信息如下:

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):

"Attach Listener" #50173 daemon prio=9 os_prio=0 tid=0x00007f4ba401a800 nid=0x69ab waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Pinpoint-Grpc-ActiveThreadCountService-Timer" #12474 daemon prio=5 os_prio=0 tid=0x00007f4b54051000 nid=0x292b in Object.wait() [0x00007f4bd067f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at java.util.TimerThread.mainLoop(Timer.java:526)
        - locked <0x00000000f065d3f0> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:505)

   Locked ownable synchronizers:
        - None

使用的技巧

jstack检测死锁

Found one Java-level deadlock:
…. 省略信息
Found 1 deadlock

jstack统计线程数

jstack -l pid | grep ‘java.lang.Thread.State’ | wc -l

jstack检测cpu占用高

1、查看cpu占用高进程 2、查看cpu占用高线程 2、转换线程ID 4、定位cpu占用线程 5、分析原因和解决

具体的详细步骤可以参考我之前写的这篇文章:体验了一把线上CPU100%及应用OOM的排查和解决过程

推荐阅读:

体验了一把线上CPU100%及应用OOM的排查和解决过程

tips:最近很多伙伴后台留言说准备换新地方体验【拧螺丝】的工作了,

但是没有好的【造火箭】的资料,这不,特意整理了一份,内容非常丰富,包括大厂Java面试资料和经验总结截图如下:

后台回复【
造火箭 】获取资料

Java“魔法”-jstack命令解析

See you next good day~

Java“魔法”-jstack命令解析

Java“魔法”-jstack命令解析

不定期分享干货技术/

秘籍
,每天进步一点点
小的积累,能带来大的改变

 Java“魔法”-jstack命令解析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120959.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C# 经典排序算法大全

    C# 经典排序算法大全

    2022年1月4日
    40
  • Anaconda如何安装basemap_安装anaconda安装方法

    Anaconda如何安装basemap_安装anaconda安装方法Anaconda下PyTorch的安装分为在线安装和在线安装。在线安装:这里默认Anaconda已经是安装好了,打开Anaconda的Prompt。不过在安装之前需要说明的是,在线安装对网络的要求比较严格,一定要使用有线网,提高安装过程的稳定性,不要使用无线网,可能会出各种各样的问题。1.设置虚拟环境。之所以要设置虚拟环境,是因为这个python里面的包有很多个,有些个包可以会存…

    2022年10月6日
    0
  • 8个hybridapp开发工具_android hybrid

    8个hybridapp开发工具_android hybridHybridApp(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“NativeApp良好用户交互体验的优势”和“WebApp跨平台开发的优势”。    HybridApp是指介于web-app、native-app这两者之间的app,它虽然看上去是一个NativeApp,但只有一个UIWebView,里面访问的是一个Web

    2022年9月16日
    0
  • 你不知道的几个牛逼网站,欢迎收藏

    你不知道的几个牛逼网站,欢迎收藏自己收藏的几个好玩牛逼的网站1、搜源码-方便找到你想要的一些源码,例如一些插件的js,免得去一些博客花钱去下载了链接:http://www.bvbcode.com/cn/.2、在线P图,不用下载或者等待photoshop打开,很爽的一个网站链接:https://www.uupoop.com/ps/.3、最全的jquery源码插件大全链接:http://www.jq22.com.4、在线的postwoman,测试接口方便至极链接:https://postwoman.io/.5、几个可

    2022年7月20日
    20
  • keil更改黑色背景颜色「建议收藏」

    keil更改黑色背景颜色「建议收藏」1、先将keil安装目录下UV4中global文件复制出来留作备用,然后用记事本打开安装目录下的global文件2、将下面的内容全部替换global里的内容,然后保存。#propertiesforallfiletypesindent.automatic=1virtual.space=0view.whitespace=0view.endofline=0code….

    2022年6月21日
    510
  • SchedulerFactoryBean初始化监听

    SchedulerFactoryBean初始化监听SchedulerFactoryBean初始化监听今天碰到一个问题,使用的是Quartz动态控制定时器的运行,功能已经完善,但是每次上线定时项目的时候,总要重启,一重启,所有定时任务自动就停止了,就会跟数据库对应的定时器状态不一致,在网上找了半天,找到了关于SchedulerFactoryBean初始化监听的东西,网上的文章大部分是SchedulerFactoryBean初始化解析,全部去研究…

    2022年5月24日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号