JVM(HotSpot):虚拟机栈(JVM Stacks)之线程问题排查方法

news2024/11/19 2:18:50

文章目录

  • 前言
  • 一、CPU占用过大
  • 二、程序运行很长时间没有结果
  • 三、总结

前言

本篇讲的排查都是基于Linux环境的。

一、CPU占用过大

这个一般是出现了死循环导致的。

1、先用top命令查看占用CPU的进程ID

top

在这里插入图片描述
2、再用ps命令查看对应的线程
就看一查看到对应的线程id

ps H -eo pid,tid,%cpu |grep 1678

在这里插入图片描述
3、jstack查看具体线程
jstack可以查看进程内所有的线程信息

jstack pid

在这里插入图片描述在这里插入图片描述
可以看到一个线程名为main的线程,类名也就是我们用户写的类名,不是JDK的类名。
注意,我们用ps命令查看的进程ID和线程ID都是10进制的。
jstack显示的线程ID16进制的,所以,要转换一下。
在这里插入图片描述
1679对应的是68F,这样,对应jstack的nid
在这里插入图片描述
从而定位到具体的线程报错。在Demo1.java第三行。
在这里插入图片描述
从这里,我们也可以总结出,在平时开发中,我们创建线程,一定要给线程命名。方便排查问题。

4、案例源码

public class Demo1 {
	public static void main(String[] args) {
		while (true){}
	}
}

二、程序运行很长时间没有结果

这个一般是出现线程死锁。

1、先用top或者ps定位程序的进程ID
我这里是案例演示,所以,用top查看Java进程ID,因为,我的机器上只运行了一个Java程序。
在这里插入图片描述
2、用jstack查看线程信息

jstack pid

在这里插入图片描述在这里插入图片描述在这里插入图片描述
此时,我们定位到具体Java代码位置,然后,去分析,为什么产生死锁,针对性优化即可。

3、案例源码

public class Demo2 {
	static byte[] a = new byte[1];
	static byte[] b = new byte[1];

	public static void main(String[] args) throws InterruptedException {
		Thread thread01 = new Thread(() -> {
			synchronized (a) {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				synchronized (b) {
					System.out.println("我获得了a和b!");
				}
			}
		});
		thread01.setName("Thread01");
		thread01.start();
		Thread.sleep(1000);
		Thread thread02 = new Thread(() -> {
			synchronized (b) {
				synchronized (a) {
					System.out.println("我获得了a和b!");
				}
			}
		});
		thread02.setName("thread02");
		thread02.start();
	}
}

三、总结

先用top或者ps命令,找到Java进程ID,然后,用jstack工具定位到具体线程。
Java的线程问题,最终还是用jstack工具去排查。

其实,查看Java进程,还可以用jps命令
所以,建议jps+jstack来排查Java线程问题。

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

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

相关文章

王道考研视频——操作系统笔记

操作系统第一章!入门 王道考研视频——操作系统笔记,第一部分,操作系统的概念和体系结构 0.0 课程白嫖指南_哔哩哔哩_bilibili0.0 课程白嫖指南是王道计算机考研 操作系统的第1集视频,该合集共计84集,视频收藏或关注UP…

openkylin介绍及其特点和优势

openKylin(开放麒麟)openKylin(开放麒麟) 社区是在开源、自愿、平等和协作的基础上,由基础软硬件企业、非营利性组织、社团组织、高等院校、科研机构和个人开发者共同创立的一个开源社区,致力于通过开源、开…

51单片机应用开发---keil 创建一个新工程并用Protues 8仿真(以点亮LED为例)

实现目标 1、掌握keil V5软件 创建一个新工程; 2、具体目标:1.会新建一个工程;2.编程实现点亮开发板的LED1. 一、新建工程步骤 1.1 在桌面上新建一个名字为 LED的文件夹 1.2 双击打开Keil uVision5 软件,点击 Project —>…

HTML和CSS中的浮动以及边框塌陷解决方案(内置练习及答案)

一、浮动概述 在HTML和CSS中,“浮动”(Float)是一种布局技术,它允许元素脱离其正常的文档流,向左或向右移动,直到它的外边缘碰到包含框或另一个浮动元素的边缘。浮动元素仍然保持块级盒模型的特性&#xff…

【GUI设计】基于图像分割的GUI系统(6),matlab实现

博主简介: 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作,可联系主页个人简介提供的联系方式或者文末的二维码。博客内容有疑问可联系沟通(博主邮箱:3249726188qq.com)。 ~~~~~~~~~~~~~~~~~~~~~~~…

【ComfyUI】减少连线的节点——cg-use-everywhere

源码:https://github.com/chrisgoringe/cg-use-everywhere 介绍:一组节点,允许数据“广播”到一些或所有未连接的输入端。大大减少了链接混乱。 【秋葉aaaki】comfyui一键运行包 夸克网盘:https://pan.quark.cn/s/64b808baa960 …

PMP--二模--解题--131-140

文章目录 反例14.敏捷–角色–教练/项目经理–仆人式领导–职责–核心工作–消除障碍;–作用–促进合作(关键字:合作,一起解决问题)--不是出现“合作”就一定选131、 [单选] 一个项目经理被分配到一个针对客户的分析项…

【网络安全】网络基础第一阶段——第三节:网络协议基础---- VLAN、Trunk与三层交换技术

目录 一、交换机 1.1 交换机定义 1.1.1 交换机 1.2 工作原理 1.2.1 数据帧的转发 1.2.2 交换机处理数据帧的三种行为 1.2.3 交换机通信 二、虚拟局域网(VLAN) 2.1 虚拟局域网简介 2.1.1 为什么需要VLAN 2.1.2 广播域的分割与VLAN的必要性 2.…

【Linux】权限管理——专治不会设置权限而头疼

🚀个人主页:小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、Linux权限管理1.1 Linux用户类型1.2 文件类型和访问权限1.3 文件访问权限的相关设置方法1.3.1 更改文…

vue2加载本地html文件

实现方法&#xff1a; 1、在public文件夹下创建static文件夹&#xff0c;static文件夹下放置需要展示的html文件&#xff0c;有没有static都没问题&#xff0c;需要在public文件夹下 <div style"width: 100%"><!--静态html资源--><div class"t…

C语言⾃定义类型:结构体

目录 前言 1. 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建和初始化 1.3 结构的特殊声明 1.4 结构的⾃引⽤ 2.结构体内存对齐 2.1 对⻬规则 实例讲解 2.2 为什么存在内存对⻬&#xff1f; 2.3 修改默认对⻬数 3. 结构体传参 4. 结构体实现位段 4.1 什么…

H7-TOOL脱机烧录增加国产3PEAK混合信号单片机TPS32和富芮坤FR8008,FR8003和FR2012支持

支持单路&#xff0c;1拖4和1拖16脱机烧录 3PEAKS思瑞浦混合信号单片机TPS32M支持 1、在线烧录&#xff0c;脱机烧录均正常。 2、注意事项&#xff1a;推荐使用整片擦除。 在线烧录&#xff1a; 脱机烧录&#xff1a; 接线效果&#xff1a; 富芮坤FR8008x支持&#xff0c;支…

3-2 RTE对Runnable的作用

返回总目录->返回总目录<- 一、前言 通过RTE给runnable提供触发事件。 runnable是可以被触发的,但是需要通过RTE来实现这个触发和调用runnable通过RTE给runnable提供所需资源。 RTE将runnable需要的一些资源通过接口传输给它(Port的实现)将BSW和SWC做隔绝。 因此OS和r…

基于标签相关性的多标签学习

本文所涉及所有资源均在 传知代码平台可获取。 目录 论文概述 什么是多标签学习 论文贡献 算法流程 挖掘“主题“——提取标签相关性 训练 &#x1d440; &#x1d447; M T 模型——拟合{特征集, 主题集合} 用标记相关性扩增数据集 再次训练拟合 &#x1d440; M模型——对真…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十一集:制作法术系统的回血机制和火球机制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作法术系统的回血机制 1.制作动画以及使用UNITY编辑器编辑2.使用代码和PlaymakerFSM制作回血机制二、制作法术系统的火球机制 1.制作动画以及使用UNITY编…

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、视频广场2、录像回看3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 视频广场 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff…

23小时续航创造历史!华硕灵耀14 Air+酷睿Ultra 200V系列处理器首发评测

一、前言&#xff1a;能效为王的酷睿Ultra 200V系列处理器 ARM平台的功耗远低于X86平台&#xff0c;ARM处理器笔记本(比如MacBook Air)的续航远高于X86&#xff0b;Windows笔记本&#xff01; 在我们看来&#xff0c;这些似乎就是理所当然、天经地义的事情&#xff0c;毕竟几十…

Git 撤销一个已经push到远端仓库的commit

在 Git 中&#xff0c;撤销一个已经推送到远程仓库的改动有几种不同的方法&#xff0c;具体取决于你是否想要完全删除改动&#xff0c;还是只是恢复文件的某个状态。以下是常见的几种方法&#xff1a; git revert 撤销特定的commit git revert 是最安全的方法&#xff0c;因为…

【MySQL 05】表的约束

目录 1.约束的概念 2 空属性约束 3.默认值约束 4. 列描述&#xff08;comment&#xff09; 5.补零&#xff08;zerofill&#xff09; 6.主键约束 &#xff08;primary key&#xff09; 基本案例 主键的删除与添加 复合主键 复合主键的删除与添加 7. 自增长约束&#xf…

vue3【实战】响应式主题(实时获取页面比例,指定尺寸内按比例缩放,超过指定尺寸保持高度不变的图片)

实时获取页面比例 移动端设计稿通常为 750px当前窗口的宽为 window.innerWidth通过 useResizeObserver 可实时监听窗口大小的变化 src/stores/theme.ts export const useThemeStroe defineStore(theme, () > {const rate ref(0)function setRate(newRate: number) {rate…