【Java8】线程问题排查分析

news2025/1/11 11:19:35

文章目录

  • 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.coloradmin.cn/o/1067987.html

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

相关文章

java基础-第1章-走进java世界

一、计算机基础知识 常用的DOS命令 二、计算机语言介绍 三、Java语言概述 四、Java环境的搭建 JDK安装图解 环境变量的配置 配置环境变量意义 配置环境变量步骤 五、第一个Java程序 编写Java源程序 编译Java源文件 运行Java程序 六、Java语言运行机制 核心机制—Java虚拟机 核…

【LeetCode高频SQL50题-基础版】打卡第2天:第11-15题

文章目录 【LeetCode高频SQL50题-基础版】打卡第2天:第11-15题⛅前言 员工奖金🔒题目🔑题解 学生们参加各科测试的次数🔒题目🔑题解 至少有5名直接下属的经理🔒题目🔑题解 确认率🔒题…

tcpdump(二)命令行参数讲解(一)

一 tcpdump实战详解 1、我们做抓包,一般都需要指定条件,保证对系统的CPU、内存、磁盘资源不会产生过大的响应备注: 遇到过tcpdump持续抓包导致系统挂了2、条件:1) tcpdump的 基础命令选项参数2) 真正的 过滤条件 ① 参数学习思路 思路:…

Window Anaconda 安装pytorch 启用cuda 终究手段

1.首先你的电脑要有NVIDIA 的显卡.没有就走吧,你如果不是window ,也走吧,不一定教程管用。 2.然后要明白,有两种CUDA版本,一个叫运行时api,一个是驱动api 2.1 运行时cuda 版本查看 (是你跑深度学习模型或其…

关于 Vue-iClient-MapboxGL 的使用注意事项

官网:https://iclient.supermap.io/web/apis/vue/zh/api/guide/installation.html 关于图的使用,其余的引入步骤不再赘述,仅说注意事项。 推荐使用的是全局引入,也就是完整引入 因为单独引入我踩了不少坑,比如说 cs…

swoole进行性能查看火焰图tideways_xhprof xhgui

D:\dnmp\services\php\Dockerfile D:\dnmp\services\php\php.ini 在php的配置文件里面增加tideways_xhprof拓展: [xhprof] ;xhprof.output_dir /var/log/php/xhprof.logextensiontideways_xhprof.so在php配置文件里面加上xhgui的header: 这样就能开启…

golang 编译器 汉化

1、找到左上角file选项,点击选中settings进行单机 2、找到settings中找到plugins选中进行点击 3、再框中输入chinese进行搜索,出结果后找到如下图所示,点击进行安装 4、安装完成后进行重启ide,完美解决

Docker linux 安装

sudo yum update sudo yum clean all sudo yum makecache#安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #添加官方存储库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#安装-跳过一些异常依赖…

计算机视觉: 基于隐式BRDF自编码器的文生三维技术

论文链接: MATLABER: Material-Aware Text-to-3D via LAtent BRDF auto-EncodeR 背景 得益扩散模型和大量的text - image 成对的图片, 现在文生2D的模型已经比较成熟的框架和模型,主流的技术比如说stable diffusion 和 midjourney 以及工业领域runway 等…

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来,但是旧的分支还是可以启动其他分支,在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…

2023全新小红书图集和视频解析去水印网站源码

2023全新小红书图集和视频解析去水印网站源码 小红书视频图集解析网站源码,在红书看到好看的图片以及好看的头像,但是直接下载又有水印就非常难受,这个可以一键解析去除水印,支持统计解析次数,本地接口。 源码下载&a…

大厂秋招真题【BFS+DP】华为20230921秋招T3-PCB印刷电路板布线(留学生专场)

华为20230921秋招T3-PCB印刷电路板布线(留学生专场) 题目描述与示例 题目描述 在PCB印刷电路板设计中,器件之间的连线,要避免线路的阻抗值增大,而且器件之间还有别的器任和别的干扰源,在布线时我们希望受…

深度学习入门:基于Python的理论与实现【笔记】

深度学习入门:基于Python的理论与实现这本数的阅读笔记 根据自己的情况总结的,可能有些简单的就没做笔记。 目录 NumPyMatplotlib感知机NumPy 在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类(numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使…

力扣 -- 516. 最长回文子序列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int ns.size();vector<vector<int>> dp(n,vector<int>(n));//记得从下往上填表for(int in-1;i>0;i--){//记得i是小于等于j的for(int ji;j&l…

reactjs开发环境搭建

Reactjs是一个前端web页面应用开发框架工具集&#xff0c;其支持前端构建页面以及后端构建页面两种常用的开发场景&#xff0c;其中&#xff0c;支持reactjs的开发框架包括next.js、remix、gatsby以及其他&#xff0c;本文主要描述next.js开发环境的搭建&#xff0c;next.js是一…

java docker图片叠加水印中文乱码

java docker图片叠加水印中文乱码 技术交流博客 http://idea.coderyj.com/ 1.由于项目需要后端需要叠加图片水印,但是中文乱码,导致叠加了之后 中文是框框 2.经过多方查找基本都说在 linux下安装字体就解决了,但是尝试了均无效 3.后来忽然想到我的项目是用docker打包部署的,不…

seata框架

Seata简介&#xff1a;&#xff08;Seata | Seata&#xff08;官方网站&#xff09;&#xff09; Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 相关术语&#xff1a; TC (Transaction Coordinator) - 事务…

嵌入式养成计划-32-网络编程----域套接字模型------抓包工具--wireshark

六十九、 域套接字模型 69.1 域套接字的概念 只能做一台主机内的进程间通信&#xff0c;协议族&#xff08;地址族&#xff09;指定为&#xff1a;AF_UNIX AF_LOCALbsp-lcd&#xff1a; s类型文件&#xff0c;就是域套接字如果客户端不手动绑定&#xff0c;则操作系统不会创建…

力扣刷题 day37:10-07

1.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 方法一&#xff1a;二分法 #方法一&#xff1a;二分法 def…

数百个下载能够传播 Rootkit 的恶意 NPM 软件包

供应链安全公司 ReversingLabs 警告称&#xff0c;最近观察到的一次恶意活动依靠拼写错误来诱骗用户下载恶意 NPM 软件包&#xff0c;该软件包会通过 rootkit 感染他们的系统。 该恶意软件包名为“node-hide-console-windows”&#xff0c;旨在模仿 NPM 存储库上合法的“node-…