jstack问题定位分析

news2025/1/13 15:53:25

目录

1、jstack是什么

2、jstack的使用

1、jstack是什么

jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用来打印出给定的java进程ID或者core file或者远程调试服务的java堆栈信息。

主要是用于生成java虚拟机当前时刻的线程快照,线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环,请求外部资源导致的长时间等待等。

线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程在后台做什么事,或者等待什么资源。

jstack的主要作用:帮助定位程序出现问题的原因,如长时间停顿、cpu占用率高等问题。

2、jstack的使用

jstack的使用可以结合top命令查看出当前系统cpu内存使用率最高的进程pid。

jstack的使用步骤为:

1、先使用jps、ps ef|grep java 查看当前Java进程的pid,严重的时候可以使用top命令查看当前系统cpu、内存使用率最高的进程pid。

[root@localhost opt]# top
top - 16:24:42 up 51 days, 20:51,  6 users,  load average: 2.31, 2.61, 2.82
Tasks: 1283 total,   1 running, 1282 sleeping,   0 stopped,   0 zombie
%Cpu(s):  8.7 us,  0.7 sy,  0.0 ni, 90.3 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem : 23083337+total, 12588844+free, 95284000 used,  9660940 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 13450121+avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4017 root      20   0 6675664   4.9g   5868 S 125.2  2.2  94141:37 xxxxx
29938 root      20   0   18.6g   2.5g  13828 S 110.8  1.1 122:35.90 java
12303 root      20   0 6861556 637644 264096 S  33.4  0.3   1537:42 xxxx
 3327 root      20   0 2951676 227816 156864 S   4.9  0.1 202:30.71 xxxx
 3874 root      20   0  355696   6792   5908 S   3.3  0.0   2660:46 xxxx
......

我们可以看到产生死锁的java进程的pid为29938

死锁:两个线程互相得到锁1、锁2,然后线程1等待线程2释放锁2,线程2等待线程1释放锁1.两者互相等待释放,于是就产生了死锁。

如何避免死锁产生:

1、按照顺序加锁:线程间加锁的顺序各不一致,就会导致死锁,如果每个线程都按同一个的加锁顺序这样就不会出现死锁。

2、获取锁时限;在每个获取锁的时候加上一个时限,如果超过某个时间就放弃获取锁。

3、死锁检测:按照线程间获取锁的关系检测线程之间是否发生死锁,如果发生死锁就执行一定的策略,如终断线程或回滚操作等。

2、使用top -Hp 29938 查看进程里面占用资源最多的线程。

[root@localhost opt]# top -Hp 29938
top - 16:25:22 up 51 days, 20:52,  6 users,  load average: 2.13, 2.53, 2.78
Threads: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.2 us,  1.0 sy,  0.0 ni, 89.6 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem : 23083337+total, 12591091+free, 95194368 used,  9728104 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 13460681+avail Mem
 Unknown command - try 'h' for help
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
31201 root      20   0   18.6g   2.4g  13828 R 99.0  1.1 108:04.58 java
29945 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.57 java
29950 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.50 java
29954 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.57 java
29955 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.54 java
29958 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.56 java
29960 root      20   0   18.6g   2.4g  13828 S  0.7  1.1   0:32.56 java
........

此时我们可以看到占用资源最多的线程是:31201

3、然后使用printf "%x\n"  31201   把线程pid转换成16进制数,就得到了:79e1

[root@localhost opt]# printf "%x\n" 31201
79e1

4、使用jstack 29938 | grep -20 79e1命令查询该线程阻塞的地方。(其中的20表示20行)

然后追溯跟踪到的信息 ,然后根据提示去排查产生死锁的原因。

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

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

相关文章

记录运行项目的一些报错

一、git pull 报错 There is no tracking information for the current branch. Please specify whic... There is no tracking information for the current branch.Please specify which branch you want to merge with.See git-pull(1) for detailsgit pull <remote>…

身份安全的零信任方法

一、什么是零信任&#xff1f; 零信任是一组不断发展的网络安全范例术语&#xff0c;它将组织的防御措施从静态的、基于网络的边界转移到关注用户、资产和资源。这是一种安全心态&#xff0c;在明确验证之前&#xff0c;每个传入连接都被视为潜在的恶意请求。这个概念是由世界…

【特征选择】基于二元多邻域人工蜂群 (BMNABC) 特征选择问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

1.EdgeX实战 Ubuntu18.04搭建运行环境

文章目录前言:1、搭建Ubuntu18.04服务器平台2、安装docker和docker-compose3、运行EdgeX4、使用浏览器访问EdgeX前言: 想着把之前arduino和树莓派搭建的物联网平台迁移到EdgeX上来&#xff0c;原因有二&#xff1a; 不想去造轮子&#xff0c;自己从零开始写一个物联网的框架&…

影响 SEO 的排名优化的因素

我们在做网站SEO运营的时候&#xff0c;经常会遇到没有排名的情况。即使我们每天保持原创内容的更新和发布&#xff0c;也没有用。这时候就要马上检查网站存在哪些问题&#xff0c;及时解决&#xff0c;让我们的日常努力尽快盈利。以下因素按米贸搜排序&#xff0c;影响SEO排名…

凡亿教育嘉立创宠粉福利,9.9元秒杀PCB多层板设计实战特训班

层林浸染&#xff0c;秋意渐浓 随着双11活动的落幕 意味着工程师最忙碌的时候即将结束 然而在这多事之秋&#xff0c;还是项目高峰期 想必很多工程师都很少过好双11吧 这可不行&#xff01;&#xff01;&#xff01; 别人家有的&#xff0c;我们家的工程师都要有&#xff01;为…

pytest学习和使用10-Pytest中的测试用例如何跳过执行?

10-Pytest中的测试用例如何跳过执行&#xff1f;1 引入2 Unittest中的用例跳过3 pytest.mark.skip4 pytest.skip()5 pytest.mark.skipif()6 跳过标记7 pytest.importorskip1 引入 有时候我们需要对某些指定的用例进行跳过&#xff0c;或者用例执行中进行跳过&#xff0c;在Uni…

高项 成本管理论文

4个过程 1&#xff0c;规划成本&#xff1a;为规划、管理、花费和控制项口成本而制定政策、程序和文档的过程。 2&#xff0c;估算成本&#xff1a;对完成项目活动所需资金进行近似估算的过程。 3&#xff0c;制定预算&#xff1a;汇总所有单个活动或工作包的估算成本&…

【面试题】JavaScript面试题详细总结(一)

js基础部分 01 值类型与引用类型 1.1 问法 js判断数据类型&#xff1f;js值类型与引用类型有哪些&#xff1f;值类型与引用类型的区别&#xff1f; 1.2 介绍 JavaScript存储数据两个区域&#xff1a;栈和堆 栈&#xff1a;通常空间是固定的&#xff08;占据空间小、大小固定&…

MySQL基础|数据库存储时间段,数字从指定值递增AUTO_INCREMENT【详细版,建议收藏】

今天&#xff0c;在写SQL语句存储时间时遇到了一些问题&#xff0c;最后成功解决了 mysql基础一、时间字段的格式限制&#xff08;一&#xff09;精确到秒的表达1、错误的表达2、解决方式如下3、查看创建的表&#xff08;二&#xff09;存储一个时间段1、错误的表达语句2、解决…

一个优秀的程序员应该养成哪些好的习惯?

文章目录一、写代码前先想好思路&#xff0c;先规划框架&#xff0c;再到局部实现二、注重代码风格三、注重代码执行效率四、掌握一些编码原则五、解决问题时&#xff0c;对于原理性的问题&#xff0c;不要面向搜索引擎编程。六、注重基础知识的学习&#xff0c;不忙碌跟风新技…

分享美容美发会员管理系统功能的特点_分享美容美发会员管理系统的制作

人们越来越关心美发&#xff0c;美发行业发展迅速&#xff0c;小程序可以连接在线场景&#xff0c;许多美发院也开发了会员卡管理系统。那么一个实用的美发会员管理系统怎么制作呢&#xff1f;它有什么功能&#xff1f;我们一起来看看~&#xff08;干货满满&#xff0c;耐心看完…

艾美捷Immunochemistry FAM FLICA Poly Caspase检测方案

Caspases在细胞凋亡和炎症中发挥重要作用。ICT的FLICA检测试剂盒被研究人员用于通过培养的细胞和组织中的胱天蛋白酶活性来定量凋亡。FAM FLICA Poly Caspase探针允许研究人员评估胱天蛋白酶的激活。 用艾美捷Immunochemistry FAM-FLICA Poly caspase检测试剂盒检测活性半胱天冬…

2022年信息学部物联网工程学院学生科协机器学习科普

什么是机器学习 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 它是人…

【安全学习】记一次内网环境渗透

注意&#xff1a; 本文仅用于技术讨论与研究&#xff0c;对于所有笔记中复现的这些终端或者服务器&#xff0c;都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习目的&#xff0c;如果列出的技术用于其他任何目标&#xff…

讲讲 Redis 缓存更新一致性,看了都说好!

当执行写操作后&#xff0c;需要保证从缓存读取到的数据与数据库中持久化的数据是一致的&#xff0c;因此需要对缓存进行更新。 因为涉及到数据库和缓存两步操作&#xff0c;难以保证更新的原子性。 在设计更新策略时&#xff0c;我们需要考虑多个方面的问题: 对系统吞吐量的影…

那些测试行业的细分岗位,你知道多少?薪资又如何?

软件测试是个需求多&#xff0c;就业机会大的职业。目前&#xff0c;我国具备软件测试能力的人员数量和市场需求相差巨大&#xff0c;巨大的市场空缺&#xff0c;使软件测试工程师从初级到高级&#xff0c;只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案

【案例一】 一块西数移动硬盘不小心摔了&#xff0c;插到电脑上就不认盘&#xff0c;之后没在其他的任何操作。这是比较典型的硬盘故障类型&#xff1a;故障原因就是移动硬盘磁头损坏。 北亚数据恢复工程师在用户同意的前提下开盘&#xff0c;对移动硬盘开盘换磁头。&#xff0…

8.5 Spring解决循环依赖的机理(AOP)

8.5 Spring解决循环依赖的机理(AOP) MyAspect Aspect public class MyAspect {After(value "execution(* com.cjf.bean.B.*(..))")public void myAfter(){System.out.println("最终通知的功能.........");} }SpringBean.xml <aop:aspectj-autoproxy&g…

Unity游戏Mod/插件制作教程03 - 插件实例1: HelloWorld

准备工作 作为编程类的教程&#xff0c;果然第一个需要来一个传统项目——HelloWolrd。 在开始之前&#xff0c;我先贴一个链接&#xff0c;这是BepInex官方的开发手册 https://bepinex.github.io/bepinex_docs/v5.0/articles/dev_guide/index.html 有什么问题也可以翻阅官方的…