分析jvm线程堆栈

【微信小程序】分享一款JVM线程堆栈在线分析工具 JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。 如题所述,今天与大家分享的是如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题。线程堆栈分析尽管不是初学者一门必备的技术,但是对于自身走向高程来说应该是必备的傍身技能。 哎…内存又溢出了,唉…?怎么突然CPU200%了等等一系列的问题都需要从线程堆栈中存储的信息找到问题所在。 JVM 线程堆栈 首先我们了解一下JVM 线程堆栈——它是什么? JVM线程堆栈是一个给定时间的快照,它能向你提供所 阅读详情

目录

一、java线程状态

二、使用jstack生成进程dump文件

三、统计dump文件中处于不同状态的线程数量

四、举例分析不同状态的线程

1、分析BLOCKED (on object monitor)状态的线程

2、分析TIMED_WAITING (on object monitor)和WAITING (on object monitor)状态的线程

3、分析TIMED_WAITING (sleeping)状态的线程

4、分析TIMED_WAITING (parking)和WAITING (parking)状态的线程


正文

一、java线程状态

二、使用jstack生成进程dump文件

a、先使用ps -ef|grep java找到java进程号

b、jstack pid > /opt/dump/pid.dump

三、统计dump文件中处于不同状态的线程数量

grep java.lang.Thread.State pid.dump| awk '{print $2$3$4$5}' | sort | uniq -c ,例子如下:

四、举例分析不同状态的线程

1、分析BLOCKED (on object monitor)状态的线程

"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00007fa3a8042800 nid=0x1a3a waiting for monitor entry [0x00007fa3f8764000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:93)
	- waiting to lock <0x00000000e1c9f108> (a weblogic.socket.PosixSocketMuxer$1)
	at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
	at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
	at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
	at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)

a、线程状态是 Blocked,阻塞状态。说明线程等待资源超时!

b、waiting to lock <0x00000000e1c9f108> 线程在等待给这个 0x00000000acf4d0c0 地址上锁

c、waiting for monitor entry 说明此线程通过 synchronized(obj) {……} 申请进入了临界区,从而进入了“Entry Set”队列,但该 obj 对应的 monitor 被其他

线程拥有,所以本线程在 Entry Set 队列中等待。

d、第一行里,"ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'"是 Thread Name。daemon是守护进程。prio是线程优先级。

tid指Java Thread id。nid指native线程的id。[0x00007fa3f8764000]是线程栈起始地址。

2、分析TIMED_WAITING (on object monitor)和WAITING (on object monitor)状态的线程

"weblogic.GCMonitor" daemon prio=10 tid=0x00007fa3a4006000 nid=0x1ba4 in Object.wait() [0x00007fa327af9000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
	- locked <0x00000000e2241e50> (a java.lang.ref.ReferenceQueue$Lock)
	at weblogic.platform.GCMonitorThread.waitForNotification(GCMonitorThread.java:88)
	at weblogic.platform.GCMonitorThread.run(GCMonitorThread.java:64)

a、“TIMED_WAITING (on object monitor)”可以看出程序在获得了“<0x00000000e2241e50>”的锁之后,调用了lock.wait(timeout)方法在等待其他线程

调用lock.notify()或lock.notifyAll();

b、WAITING (on object monitor)和TIMED_WAITING (on object monitor)在于前者调用了lock.wait()方法

3、分析TIMED_WAITING (sleeping)状态的线程

"scheduler_QuartzSchedulerThread" prio=10 tid=0x00007fa3a82f0800 nid=0x1aad waiting on condition [0x00007fa3cc39e000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
	at java.lang.Thread.sleep(Native Method)
	at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:394)

a、“TIMED_WAITING (sleeping)” 可以看出程序调用了Thread.sleep(long millis);


4、分析TIMED_WAITING (parking)和WAITING (parking)状态的线程

"Timer runner-1,TICKET_REGISTRY_76ENV,bjxt-kfcs-46159" daemon prio=10 tid=0x00007fa3a8ad6000 nid=0x1a44 waiting on condition [0x00007fa3cd7b2000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000e21c58f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2116)
	at org.jgroups.util.TimeScheduler2.waitUntilNextExecution(TimeScheduler2.java:328)
	at org.jgroups.util.TimeScheduler2._run(TimeScheduler2.java:310)
	at org.jgroups.util.TimeScheduler2.run(TimeScheduler2.java:268)
	at java.lang.Thread.run(Thread.java:662)
a、“TIMED_WAITING (parking)”中的 timed_waiting 指等待状态,但这里指定了时间,到达指定的时间后自动退出等待状态;parking指线程处于挂起中。
b、“waiting on condition”需要与堆栈中的“parking to wait for <0x00000000e21c58f0>” 结合来看。首先,本线程肯定是在等待某个条件的发生,来把自己唤醒。

分享一款JVM线程堆栈在线分析工具(1),字节跳动技术面试 看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。 阅读详情

相关推荐

UNext:基于 MLP 的快速医学图像分割网络

有代码,可深入学习轻量级分割模型的论文切入点 UNet 及其最新扩展(如 TransUNet)近年来一直是领先的医学图像分割方法。然而,这些网络无法有效地用于应用中的快速图像分割,因为它们参数繁重、计算复杂且使用缓慢。为此,我们提出了 UNeXt,它是一种基于卷积多层感知器(MLP)的图像分割网络。我们以有效的方式设计了 UNeXt,其中包括早期卷积阶段和潜在阶段的 MLP 阶段。我们提出了一个标记化的 MLP 块,我们可以在其中有效地标记和投影卷积特征,并使用 MLP 来对表示进行建模。

Philo的博客 3942

【JVM性能调优】jstack和线程dump分析

一、几个概念: 1、jstack命令的语法格式:jstack <pid>,可用于查看java进程id。 2、Dump文件:Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专门的工具软件打开,比如使用Windbg。 在Windbg中可以通过.dump命令保存进程的dump文件。比如下面的命令把当前进程的镜像保存为c:\testdump.dmp文件:.dump /ma c:\testdump.d

wit_cx的博客 880

DSP复习笔记(5)——外部接口模块XINTF

【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习

BerenCamlost的博客 1万+

如何利用线程堆栈定位问题

01 背景 针对在一些服务中会出现的cpu飙高、死锁、线程假死等问题,总结和提炼排查问题的思路和解决方案非常重要。上述问题会涉及到线程堆栈,本文将结合实际案例来阐述一下线程堆栈的功能。 02 基本知识 2.1 什么是线程堆栈 线程堆栈是系统当时某个时刻的线程运行状态(即瞬间快照)。 线程堆栈的信息包含 线程的名字、ID、线程的数量 线程的运行状态、锁的状态(锁被那个线程持有,哪个线程再等待锁) 调用堆栈(即函数的调用层次关系)。调用堆栈包含完整的类名,所执行的方法,源代码的行数 2.2 线程堆

SmartCodeTech的博客 2780

西门子Simotion运动控制

SIMOTION

rjimhcd的博客 3024

ARIMA模型的R实现

1.模型简介 ARIMA模型,全称差分自回归移动平均模型。可以看作是差分运算和ARMA模型的结合。主要是针对具有线性趋势的非平稳的时间序列,来进行建模预测。 ARIMA模型的形式如下: Φ(B)∇

heirenmin的博客 1万+

Java并发基石——所谓“阻塞”:Object Monitor和AQS(1)

通过上文的介绍我们知道就算是“阻塞”状态,根据进入阻塞状态的方式不同,阻塞状态也会有细微的差异。这样的差异基本上分成两种大的类型:Object Monitor和Parking。在本文和后续的几篇文章中,我们将对它们进行详细介绍。我们将首先介绍基于Object Monitor原理的悲观锁实现,然后再讨论基于AQS队列同步器框架。

JAVA入门中 1万+

工业机器人抓取目标检测与抓取姿态估计系统:基于YOLOv12与Cornell Grasping Dataset

工业机器人抓取是自动化生产中的核心环节,而精确的目标检测和抓取姿态估计是实现高效抓取的关键。本文将详细介绍如何构建一个完整的工业机器人抓取系统,该系统结合了最新的YOLOv12目标检测算法和Cornell Grasping Dataset的抓取姿态估计,并提供了用户友好的UI界面。本文详细介绍了一个完整的工业机器人抓取系统,该系统结合了YOLOv12目标检测和基于Cornell Grasping Dataset的抓取姿态估计。我们将使用PyQt5构建一个用户友好的界面,集成目标检测和抓取姿态估计功能。

YOLO 574

线程异常WAITING(parking)

项目中线程数量持续增长,且基本无法回收关闭,线程数量一直累积达到几万,影响CPU开销和性能,导致服务器卡死

qq_38783304的博客 1万+

【图像超分】论文精读:Interpreting Super-Resolution Networks with Local Attribution Maps(LAM)

论文题目:Interpreting Super-Resolution Networks with Local Attribution Maps —— 用局部归因图解释超分辨率网络CVPR 2021!必读文章!必须会的可视化手段!很多文章中都会对比LAM!图像超分辨率 (SR) 技术发展迅速,受益于深度网络的发明及其连续突破。然而,众所周知,深度学习和深度神经网络很难解释。SR网络继承了这种神秘的性质,很少有作品试图理解它们。在本文中,我们对 SR 网络进行了归因分析。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 547

小红书urlscheme和Activity

本文档详细介绍了小红书App的Deeplink跳转规范,涵盖了多个功能模块的跳转协议。主要内容包括:主页各Tab(关注、发现、购买)的跳转方式;不同类型笔记(图文/视频/长笔记)的详情页跳转参数;用户相关页面(主页/绑定/资料/消息等)的跳转协议;搜索功能(输入页/结果页)的跳转方式;以及话题、标签、专辑、H5页面等特殊场景的跳转实现。文档还提供了各跳转协议所需的参数说明,包括参数类型、默认值、是否必填等详细信息,并标注了不同版本和平台的兼容性要求。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 786

jvm堆栈日志里大量的WAITING (parking)怎么分析问题代码在哪里呢?

下图是阿里arms日志监控里,当时的线程情况: 以下日志是jstack打印的日志: 2021-07-13 12:58:18 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode): "Keep-Alive-Timer" #1660 daemon prio=8 os_prio=0 tid=0x00007fab642a6000 nid=0x6a9 sleeping[0x00007faba86db0..

qq_33543227的博客 1万+

智能体开发套件(ADK)介绍

city } ---") city_normalized = city . lower() . replace(" " , "") # 模拟天气数据库 mock_weather_db = {

lpfasd123的博客 1406

JVM 线程堆栈分析过程详解

在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中...

田维常 1524

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

分享一款JVM线程堆栈在线分析工具

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!如果你需要这些资料,⬅专栏获取。

2401_86086721的博客 1230

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jvm堆栈与java堆栈_java后端知识派:JVM 线程堆栈分析过程详解,初级架构师一定收藏...

JVM 线程堆栈分析过程详解,初级架构师速度收藏JVM 线程堆栈分析过程详解在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息。我的目标是分享我过去十几年来在线程分析中积累的知识和经验。这些知识和经验是在各种版本的J...

weixin_35703673的博客 219

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java 堆栈_JVM 线程堆栈分析过程详解

私信我或关注微信号:狮范儿,回复:学习,获取免费学习资源包。1) 线程堆栈概述及基础知识2) 线程堆栈的生成原理以及相关工具3) 不同JVM线程堆栈的格式的差异(Sun HotSpot、IBM JRE、Oracal JRockit)4) 线程堆栈日志介绍以及解析方法5) 线程堆栈的分析和相关的技术6) 常见的问题模板(线程竟态、死锁、IO调用挂死、垃圾回收/OutOfMemoryError问题、死...

weixin_39598584的博客 213

JVM 线程堆栈分析过程详解+代码

其中,局部变量表用于存储方法执行过程中所涉及到的变量,操作数栈则用于存储方法执行过程中所涉及到的局部变量和中间结果,方法返回地址用于指定方法正常返回时的跳转地址。从上述信息可以看出,在t2线程中,执行到了testMethod1方法,但是该方法获取了一个ReentrantLock锁,导致线程阻塞,无法继续执行。通过对线程堆栈分析工具输出的线程堆栈信息进行分析,我们可以定位到具体的代码行数,从而更好地了解程序中的异常情况。通过线程堆栈分析,我们可以快速定位到程序的异常情况,并针对问题进行解决。

wgq2020的博客 369

分析JVM的线程堆栈以及如何从堆栈信息中

在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息。   我的目标是分享我过去十几年来在线程分析中积累的知识和经验。这些知识和经验是在各种版本的JVM以及各厂商的JVM供应商的深入分析中获得的,在这个过程中我也总结

nvnh7553的博客 1354

JVM 线程堆栈数据分析

一.JVM线程模型示意图 JVM 内部线程主要分为以下几种: • VM 线程:单例的 VMThread 对象,负责执行 VM 操 作; • 定时任务线程:单例的 WatcherThread 对象, 模拟 在 VM 中执行定时操作的计时器中断; • GC 线程:垃圾收集器中,用于支持并行和并发垃圾 回收的线程; • 编译器线程: 将字节码编译为本地机器代码; • 信号分发线程:等待进程指示的信号,并将其分配给 Java 级别的信号处理方法。 二.JVM在GC过程中怎么暂停其他线程的? 使用

suxiao_21的博客 925

JavaScript实现的JVM线程堆栈分析工具——jstack-review

JavaScript实现的JVM线程堆栈分析工具——jstack-review 1. 项目基础介绍及主要编程语言 jstack-review 是一个基于 JavaScript 编写的 JVM 线程堆栈分析工具。该项目旨在为开发人员提供一个便捷的工具,用于分析和理解 Java 虚拟机产生的线程堆栈信息。该项目主要使用 JavaScript 进行开发,同时也包含了一些 HTML 和 CSS 代码,用于...

gitblog_00481的博客 457

分享一款JVM线程堆栈在线分析工具,2024年最新java面试知识点汇总

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)66个Java面试知识点架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)算法刷题(PDF)

2401_84434975的博客 1272
上一篇: HTTP状态码302、303和307的故事
下一篇: 分析weblogic数据库线程池无可用连接的问题
拓-拓
博客等级 码龄12年 10粉丝 14原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值