jstack 脚本 自动日志_深入理解jstack日志

Tags : jstack日志发表时间:

2019-03-17 23:53:19

在分析线上问题时常使用到jstack 命令将当时Java应用程序的线程堆栈dump出来。

面对jstack 日志,我们如何查看?

首先要清楚线程的状态

线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead

线程状态变迁图:

各状态说明:

New: 当线程对象创建时存在的状态,此时线程不可能执行;

Runnable:当调用thread.start()后,线程变成为Runnable状态。只要得到CPU,就可以执行;

Running:线程正在执行;

Waiting:执行thread.join()或在锁对象调用obj.wait()等情况就会进该状态,表明线程正处于等待某个资源或条件发生来唤醒自己;

Timed_Waiting:执行Thread.sleep(long)、thread.join(long)或obj.wait(long)等就会进该状态,与Waiting的区别在于Timed_Waiting的等待有时间限制;

Blocked:如果进入同步方法或同步代码块,没有获取到锁,则会进入该状态;

Dead:线程执行完毕,或者抛出了未捕获的异常之后,会进入dead状态,表示该线程结束

其次,对于jstack日志,我们要着重关注如下关键信息

Deadlock:表示有死锁

Waiting on condition:等待某个资源或条件发生来唤醒自己。具体需要结合jstacktrace来分析,比如线程正在sleep,网络读写繁忙而等待

Blocked:阻塞 Waiting on monitor entry:在等待获取锁

in Object.wait():获取锁后又执行obj.wait()放弃锁

对于Waiting on monitor entry 和 in Object.wait()的详细描述:Monitor是 Java中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或者 Class的锁。每一个对象都有,也仅有一个 monitor。从下图中可以看出,每个 Monitor在某个时刻,只能被一个线程拥有,该线程就是 "Active Thread",而其它线程都是 "Waiting Thread",分别在两个队列 " Entry Set"和 "Wait Set"里面等候。在 "Entry Set"中等待的线程状态是 "Waiting for monitor entry",而在 "Wait Set"中等待的线程状态是 "in Object.wait()"

最后通过示例来实践一下

示例一:描述 Blocked 和 Waiting to lock

执行后程序输出:

Thread[main,5,main]

说明主线程先进入同步代码块,获取到thread2对象上的锁。

通过jstack输出结果:

先说明下日志格式:

"thread2"为线程名称,在平时创建线程或线程池时请务必取一个见明之义的线程名称,方便排查问题;

prio=6:线程优先级,不用关心;

tid=0x0000000006540800:线程id,不用关心;

nid=0x2be4:操作系统映射的线程id, 非常关键,后面再使用jstack时补充;

waiting for monitor entry:表示线程正在等待获取锁

0x0000000006dbf000:线程栈起始地址

从jstack日志中,可以看到:主线程获取到thread2对象上的锁,因此正在执行sleep操作,状态为TIMED_WAINTING, 而thread2由于未获取到thread2对象上的锁,因此处于BLOCKED状态。

再细看,thread2 正在"waiting to lock <0x00000000d719d280>",即试图在地址为0x00000000d719d280所在的对象获取锁,而该锁却被main线程占有(locked <0x00000000d719d280>)。main线程正在"waiting on condition",说明正在等待某个条件触发,由jstacktrace来看,此线程正在sleep。

经验:如果在jstack日志发现大量的线程在waiting to lock 某个地址,只要能查到哪个线程获取到锁就可以方便定位问题了

示例二:描述waiting on condition

]

jstack日志输出结果:

从日志中可以看到,main线程的状态是Waiting,正在"waiting on condition"来唤醒自己。

结合jstackstrace日志来看,"parking to wait for <0x00000000d719ba70> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)"说明在调用ArrayBlockingQueue.put()阻塞了。

示例三:描述Object.wait()

程序输出结果:

Thread[thread2,5,main]

Thread[main,5,main]

说明线程thread2先进入同步代码块,获取到thread2对象上的锁。

jstack日志输出结果:

可以看出:线程thread2的状态是"Waiting", 正在"in Object.wait()"。表明该线程在获取到对象锁后,调用obj.wait()方法,放弃了锁,进入了"Wait Set"队列。

...阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

swagger默认访问路径_swagger 如何配置项目访问路径

boot子模块的pom文件&#xff1a;xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">swagger-parentcom.test.swagger1.0-SNAPSHOT4.0.0warbo…

layui向body添加html_layui 各项配置

第一、如何全部选中table中每一条记录1.首先给table的父类设置一个唯一id *这种方式不推荐&#xff0c;效果比较差&#xff0c;推荐第2种方式再搜索 alias-table div.layui-table-fixed.layui-table-fixed-l下面的i元素var bbcc $(#alias-table div.layui-table-fixed.layui-ta…

国产自主可控的MBSE解决方案和全数字仿真平台(SkyEye)

2020年6月&#xff0c;哈工大、哈工程被美国商务部列入实体清单&#xff0c;禁用MATLAB事件频繁登上热搜&#xff0c;工业软件被称为「卡脖子」技术。 截止到2020年12月&#xff0c;中国已有超过300家企业和机构被列入美国“实体名单”&#xff0c;被列入名单的大部分是从事安全…

iservice封装有哪些方法_总结WebService的一些封装技巧

今天早上起来&#xff0c;想谈谈.NET中的WebService&#xff0c;当然我不想讲什么是WebService&#xff0c;或者怎么用WebService&#xff0c;因为那个大家随便Google一下前100页都能找到答案。今天我想来分享一下我在用WebService中的一些技巧(至少我认为是技巧&#xff0c;还…

一种全数字实时仿真的安全关键领域解决方案

随着科技的发展&#xff0c;系统工程的设计体量逐渐庞大起来&#xff0c;尤其是对于轨道交通、航空航天、核电站等安全关键领域中&#xff0c;如何在复杂度逐年变大的同时保证其安全性和可靠性&#xff0c;是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程&a…

vue 引用网络css_vue如何引用其他组件(css和js)

1.vuejs组件之间的调用components注意&#xff1a;报错Do not use built-in or reserved HTML elements as component id:修改组件的名字&#xff0c;例如不能使用address为组件名字组件名字不要使用内置的或保留HTML元素为组件id&#xff0c;App.vue是一个入口&#xff0c;vue…

国产自主可控的MBSE建模与仿真平台SkyEye

转载&#xff1a; 2020年6月&#xff0c;哈工大、哈工程被美国商务部列入实体清单&#xff0c;禁用MATLAB事件频繁登上热搜&#xff0c;工业软件被称为「卡脖子」技术。 截止到2020年12月&#xff0c;中国已有超过300家企业和机构被列入美国“实体名单”&#xff0c;被列入名…

access求斐波拉契数列_打印目录,斐波那契数列的递归与循环,牧场牛数

实验报告1任务概述(任务说明)1 f(n)f(n-1)f(n-2)f(0)f(1)1&#xff0c;求斐波那契数列第20项&#xff0c;分别用循环和递归的方式&#xff0c;比较时间效率。提示&#xff1a;可以使用c函数clock取出当前系统时间&#xff0c;计算前后各一次&#xff0c;两次相减除以每秒的时钟…

国产自主可控的形式化验证代码自动生成工具ModelCoder可替代Matlab/Sumlink

在安全关键领域&#xff0c;基于模型的软件工程或者软件开发已逐渐进入了我国的装备研制过程中。使用SimuLink或者SCADE等嵌入式软件建模工具对算法或者控制逻辑进行可视化建模&#xff0c;然后生成高可靠的二进制代码逐渐成为了安全关键领域的主流软件开发方式。由我司自主开发…

自主可控的安全关键领域国产工业软件SkyEye

全球制造业正处于新一轮变革的浪潮中&#xff0c;大数据、云计算等新一代信息技术正加速向工业领域融合渗透&#xff0c;工业互联网、工业4.0、智能制造等战略理念不断涌现。传统产业数字化转型升级的需求强烈&#xff0c;工业软件缺乏自主可控成为横亘在我国发展工业4.0道路上…

weblogic中ssrf漏洞修复_Weblogic-SSRF漏洞复现

0x00简介WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件&#xff0c;BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。SSRF简介服务端请求伪造(Server-Side Request Forgery)…

python 字符串unicode编码_python的string与Unicode转换,gbk字符串编码

问题一字串前面少了u。当遇见以下情况。返回字符串为\u82f9\u679c的unicode时候。str1 \u82f9\u679c # 这里没有u&#xff0c;当传入参数不是unicode的时候print str1 # 结果是 : \u82f9\u679cprint u\u82f9\u679c # 结果是 : 苹果解决方法&#xff1a;加上ustr1 \u82f9\u679…

应用在核电站DCS系统的代码自动生成工具ModelCoder

对标航空航天领域&#xff0c;核电新型号作为典型复杂系统在未来的发展趋势和任务变得十分明确&#xff0c;即正规化、标准化地应用MBSE从概念设计、初步设计、持续贯穿至详细设计、施工、调试、运维、退役的全生命周期各阶段&#xff0c;开发出符合核工业本身的需求&#xff0…

怎样在电脑上上传图片_电脑上回收站怎样恢复

把桌面上的文件删除&#xff0c;如果想再次找回&#xff0c;只要在电脑的回收站就可以原封不动的把文件找回来。但不小心删除了回收站的信息&#xff0c;怎么办呢?大家遇以这样的情况&#xff0c;也不要太着急&#xff0c;电脑上回收站怎样恢复呢&#xff1f;小编带分享一下解…

基于模型的系统工程设计软件ModelCoder在航空发动机控制设计中的应用

基于模型的系统工程&#xff08;MBSE&#xff09;使用数字模型的方式表达描述工程系统的完整生命周期中的需求和设计等活动&#xff0c;以无歧义、模块化等优点快速覆盖了如航空航天、船舶、卫星等相关安全关键领域。在系统工程的初期&#xff0c;系统产生的信息都以文档得形式…

python的字符编码叙述_Python: 熟悉又陌生的字符编码

字符编码是计算机编程中不可回避的问题&#xff0c;不管你用 Python2 还是 Python3&#xff0c;亦或是 C, Java 等&#xff0c;我都觉得非常有必要厘清计算机中的字符编码概念。本文主要分以下几个部分介绍&#xff1a;基本概念常见字符编码简介Python 的默认编码Python2 中的字…

基于模型的系统工程MBSE软件工具(ModelCoder)

我们一直致力于提供给航空航天制造商一套全数字的MBSE建模与仿真优化解决方案——基于模型的系统工程MBSE软件工具&#xff08;ModelCoder&#xff09;。我们的仿真验证技术可用于开发高复杂度和高保真度的模型&#xff0c;对飞机发动机&#xff0c;飞机的飞控进行预测性的虚拟…

面向航空航天工业领域的基于模型的仿真验证工具SkyEye

我们一直致力于提供给航空航天制造商一套全数字的优化方案——面向航空航天工业领域的基于模型的仿真验证工具SkyEye。我们的仿真验证技术可用于开发高复杂度和高保真度的模型&#xff0c;对发动机&#xff0c;飞机的飞控进行预测性的虚拟验证和测试。我们能够准确地进行全数字…

高性能高可靠性的全数字嵌入式仿真测试软件SkyEye

随着科技的发展&#xff0c;系统工程的设计体量逐渐庞大起来&#xff0c;尤其是对于轨道交通、航空航天、核电站等安全关键领域中&#xff0c;如何在复杂度逐年变大的同时保证其安全性和可靠性&#xff0c;是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程&a…

二元一次函数最值问题_初二上学期,一次函数方案设计最值问题,两类题目解题思路不一样...

方案设计问题在一元一次方程实际问题中有所接触&#xff0c;在一次函数实际应用题中也有。一次函数中的方案设计问题&#xff0c;常与一次函数的性质、不等式(组)、方程组等知识点相结合&#xff0c;这类题目一旦掌握解题方法&#xff0c;难度不是很大。本篇文章主要介绍一次函…