【Java8】线程问题排查分析

文章目录

  • thread dump简介
  • JDK 工具
    • jstack
    • jattach
    • jvisualvm

Java程序CPU消耗较高,怎么快速看出是那个线程导致的呢?我们可以使用命令 jstack/jattach来快速定位问题

thread dump简介

thread dump 是 Java 进程的所有线程状态的快照。每个线程的状态都通过堆栈跟踪来显示线程堆栈的内容。线程快照有助于诊断问题,因为它可以显示线程的活动。线程快照以纯文本形式编写,因此我们可以将其内容保存到文件中,并在文本编辑器中查看。
在接下来,我们用工具和方法来生成thread dump。

JDK 工具

JDK 提供了几个可以捕获 Java 应用程序的thread dump的工具,这些工具都位于JDK 主目录内的bin文件夹下。因此,只要该目录位于系统路径中,我们就可以从命令行执行这些工具。

jstack

jstack是一个命令行 JDK 工具,我们可以用它来捕获线程转储。它获取进程的pid并在控制台中显示thread dump。或者,我们可以将其输出重定向到文件。

  1. 找出进程PID
 ps -ef|grep java#预期输出#16639就是java程序的pid#root 16639 1  1  2022 ? /usr/local/jdk1.8.0_102/bin/java xxx.jar
  1. 分析耗时较高的线程

top -H -p 16639
# 此文中我们假定16883线程CPU有问题
# 计算该线程16进制
printf %x 16883
# 输出41f3

在这里插入图片描述

  1. dump thread文件
jstack 16639 > 16639_thread.dump
  1. 确认异常的线程代码
vim 16639_thread.dump

在这里插入图片描述

jattach

在一个程序中集成jmap + jstack + jcmd + jinfo功能。无需安装 JDK,只需使用 JRE。支持 Linux 容器。非常适用容器化服务、jre服务
生成线程文件方式为

jattach 16639 dumpthread 16639_thread.dump

alpine容器安装方式:

apk add --no-cache jattach --repository https://mirrors.aliyun.com/alpine/latest-stable/community/ --allow-untrusted

手动安装:jattach
jattach分析方案除生成thread 文件命令不一样外,其他步骤均一致

jvisualvm

jvisualvm是一个具有图形界面的工具,可让监视、排除故障并分析 Java 应用程序。GUI 很简单,但非常直观且易于使用。jvisualvm功能丰富,可以捕获thread dump。如果我们右键单击 Java 进程并选择“Thread Dump”选项,该工具将创建线程dump并在新选项卡中打开它:
在这里插入图片描述

该方案查看线程非常直观,但是适合本地程序,如果需要调试远端程序,需要在java服务启动时设置参数允许jvisualvm远程连接:
-Dcom.sun.management.jmxremote.port=19999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

注意:从 JDK 9 开始,Visual VM 不包含在 Oracle JDK 和 Open JDK 发行版中。因此,如果我们使用 Java 9 或更高版本,我们可以从 Visual VM 开源项目站点获取 JVisualVM

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

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

相关文章

练[MRCTF2020]套娃

[MRCTF2020]套娃 文章目录 [MRCTF2020]套娃掌握知识解题思路代码分析1代码分析2 关键paylaod 掌握知识 ​ 参数的_符号的替换,正则和强等于联合绕过,jsfuck编码,bp请求方式的转变,本地ip的请求头,代码审计&#xff0c…

操作系统的五种IO模型

高级IO 阻塞IO 在内核将数据准备好之前,系统调用会一直等待,所有的套接字默认都是阻塞方式。 非阻塞IO 如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。 非阻塞IO往往需要程序员循环的方式反复尝试…

TCP四次挥手

四次挥手发生在断开连接的时候,在程序中当调用了close()会使用TCP协议进行四次挥手。 客户端和服务器端都可以主动发起断开连接,谁先调用close()谁就是发起。 因为在TCP连接的时候,采用三次握手建立的的连接是双向的,在断开的时候…

电脑被删除的文件怎么恢复?2023年数据恢复方法分享

大多数人在使用电脑时都可能会遇到误删文件的情况。一不小心,重要的文件或数据就消失了,情急之下,大多会感到慌乱和无助。但其实,文件误删除并非不可挽回的灾难。本文将为大家介绍几种有效的文件恢复方法,以帮助大家在…

【力扣】42. 接雨水

这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为…

SpringBoot 可以同时处理多少请求

目录 一、前言 二、相关配置 1、配置信息 2、配置说明 3、案例说明 三、代码验证 1、测试代码 2、测试步骤 四、总结 一、前言 首先,在Spring Boot应用中,我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这…

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中,实现拖拽和排序功能是非常常见的需求,特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…

抖捧自动直播市场火热,实体行业如何实现高效开播?

在AI数字人热度之后,最近抖捧场景自动直播开始火遍全网,因为操作简单成本极低,只需要一部手机放在店里,就可以高效开播,深受广大实体行业老板的认可,那么抖捧实景自动直播的方式,具体是怎么实现…

pytest测试框架

pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,支持非常丰富的插件,同时兼容 unittest 框架。 pytest框架的安装:pip install pytest pytest框架优点: 1、简单灵活,容易上手&#xff…

P1014 [NOIP1999 普及组] Cantor 表

#include <bits/stdc.h> using namespace std; int main() {int n,k1;cin>>n;while (n>k) {nn-k;k;}if(k%20) cout<<n<<"/"<<(k1-n);else cout<<k1-n<<"/"<<n;return 0; }

IDEA添加Vue文件模板

代码模板&#xff1a; <!-- *${COMPONENT_NAME} *author niemengshi *date ${DATE} ${TIME} --> <template> #[[$END$]]# </template> <script> export default { name: "${COMPONENT_NAME}", props: { }, components: {}, mounted: {}, d…

数据压缩与管理:掌握Linux VDO和LVM的力量

1.逻辑卷(LVM&#xff0c;Logical Volume Management) 动态的为服务器磁盘添加空间&#xff0c;而不会影响原磁盘的数据&#xff0c;也不需要对原始磁盘重新分区。 1.1 LVM介绍 以下是LVM的示意图&#xff1a; 我们拿到一块硬盘后首先对齐进行划分分区&#xff0c;也就得到…

CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明

国庆假期&#xff0c;闲着没事&#xff0c;在家研究技术~ 上一篇&#xff0c;我们介绍了动画剪辑、动画组件以及基本的使用流程&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator 动画系统-动画剪辑和动画组件介绍。 今天&#xff0c;主要介绍动画编辑器相关功能…

FastThreadLocal 快在哪里 ?

FastThreadLocal 快在哪里 &#xff1f; 引言FastThreadLocalset如何获取当前线程私有的InternalThreadLocalMap &#xff1f;如何知道当前线程使用到了哪些FastThreadLocal实例 ? get垃圾回收 小结 引言 FastThreadLocal 是 Netty 中造的一个轮子&#xff0c;那么为什么放着…

一篇理解网络分层原理

一、网络分层的必要性。 如图是一个数据的传输过程&#xff0c;在这个途中会有很多的原因导致数据丢失&#xff0c;网络分层就要可以很大程度的避免这个现象。 网络分层的必要性体现在以下几个方面&#xff1a; 抽象复杂度&#xff1a;网络分层将网络功能按照不同的层次进行分…

[论文笔记]Poly-encoder

引言 本文是Poly-encoder1的阅读笔记,论文题目为基于预训练模型的快速准确多句评分模型。 也是本系列第一篇基于Transformer架构的模型,对于进行句子对之间比较的任务,有两种常用的途经:Cross-encoder在句子对上进行交互完全自注意力;Bi-encoder单独地编码不同的句子。前…

SQL进阶 - SQL的编程规范

性能优化是一个很有趣的探索方向&#xff0c;将耗时耗资源的查询优化下来也是一件很有成就感的事情&#xff0c;但既然编程是一种沟通手段&#xff0c;那每一个数据开发者就都有义务保证写出的代码逻辑清晰&#xff0c;具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …

【计算机网络】网络编程接口 Socket API 解读(8)

Socket 是网络协议栈暴露给编程人员的 API&#xff0c;相比复杂的计算机网络协议&#xff0c;API 对关键操作和配置数据进行了抽象&#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解 socket 编程。…

IDEA 2021.2.2设置自动热部署

1.导入包坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> 2.pom.xml添加piugins插…