当前位置: 首页 > news >正文

Arthas实战教程:定位Java应用CPU过高与线程死锁

引言

在Java应用开发中,我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。

准备工作

首先,我们创建一个简单的Java应用,模拟CPU过高和线程死锁的情况。在这个示例中,我们将编写一个名为CpuController的类,包含两个方法:loop()和deadlock()。

package your.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;@RestController
@Slf4j
public class CpuController {private Object lock1 = new Object();private Object lock2 = new Object();@GetMapping("loop")public String loop() {log.warn("loop start");while (true) {}}@GetMapping("deadlock")public String deadlock() {log.warn("deadlock start");new Thread(()->{synchronized (lock1) {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}synchronized (lock2) {log.info("thread1 over");}}}).start();new Thread(()->{synchronized (lock2) {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}synchronized (lock1) {log.info("thread2 over");}}}).start();return "ok";}}

Arthas排查CPU过高过程

步骤一:通过thread命令查看线程情况

thread

在这里插入图片描述

在这里插入图片描述
可以看到ID为17的线程CPU占用过高。

步骤二:通过thread 线程id命令查看线程状态

thread 17

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看出CpuController的20行代码,结合代码看出这里是一个死循环

Arthas排查线程死锁过程

步骤一:通过thread -b命令查看线程死锁情况

thread -b

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看出死锁已经产生了,结合代码可以看出死锁来源于CpuController的32行

步骤二:通过thread 线程id命令查看线程状态

thread <Thread-7的ID>
thread <Thread-8的ID>

在这里插入图片描述
在这里插入图片描述
可以看出 Thread-7 和 Thread-8 都在等待对方的资源,造成死锁。

总结

通过以上步骤,我们使用Arthas成功定位了Java应用中的CPU过高和线程死锁问题。在实际项目中,遇到类似问题时,可以根据本文的排查步骤进行定位和解决。

相关文章:

Arthas实战教程:定位Java应用CPU过高与线程死锁

引言 在Java应用开发中&#xff0c;我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。 准备工作 首先&#xff0c;我们创建一个简单的Java应用&#xff0c;模拟CPU过高和线程死锁的情况。在这个示例中&#xff0c;我们将编写一个…...

HTML制作跳动的心形网页

作为一名码农 也有自己浪漫的小心思嗷~ 该网页 代码整体难度不大 操作性较强 祝大家都幸福hhhhh 效果成品&#xff1a; 全部代码&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE> 一个…...

如何在Odoo 17 销售应用中使用产品目录添加产品

Odoo&#xff0c;作为一个知名的开源ERP系统&#xff0c;发布了其第17版&#xff0c;新增了多项功能和特性。Odoo 17包中的一些操作简化了&#xff0c;生产力提高了&#xff0c;用户体验也有了显著改善。为了为其用户提供新的和改进的功能&#xff0c;Odoo不断进行改进和增加新…...

为什么pdf拆分出几页之后大小几乎没有变化

PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因&#xff1a; 图像压缩: 如果 PDF 文件中包含图像&#xff0c;而这些图像已经被压缩过&#xff0c;拆分后的页面依然会保留这些压缩设置&#xff0c;因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…...

如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装&#xff1a; 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …...

(六)PostgreSQL的组织结构(3)-默认角色和schema

PostgreSQL的组织结构(3)-默认角色和schema 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;57771 默认角色 Post…...

DockerFile定制镜像

dockerfile 简介 Dockerfile 是⼀个⽤来构建镜像的⽂本⽂件&#xff0c;⽂本内容包含了⼀条条构建镜像所需的指令和 说明&#xff0c;每条指令构建⼀层&#xff0c;最终构建出⼀个新的镜像。 docker镜像的本质是⼀个分层的⽂件系统 centos的iso镜像⽂件是包含bootfs和rootfs…...

Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)

个人主页&#xff1a; 进朱者赤 阿里非典型程序员一枚 &#xff0c;记录平平无奇程序员在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; 引言 在Java中&#xff0c;并发编程一直是一个重要的领域&#xff0c;而JDK 8中的java.u…...

岛屿个数(dfs)

[第十四届蓝桥杯省B 岛屿个数] 小蓝得到了一副大小为 M N MN MN 的格子地图&#xff0c;可以将其视作一个只包含字符 0 0 0&#xff08;代表海水&#xff09;和 1 1 1&#xff08;代表陆地&#xff09;的二维数组&#xff0c;地图之外可以视作全部是海水&#xff0c;每个岛…...

【C++造神计划】运算符

1 赋值运算符 赋值运算符的功能是将一个值赋给一个变量 int a 5; // 将整数 5 赋给变量 a 运算符左边的部分叫作 lvalue&#xff08;left value&#xff09;&#xff0c;右边的部分叫作 rvalue&#xff08;right value&#xff09; 左边 lvalue 必须是一个变量 右边 rval…...

Cortex-M3/M4处理器的bit-band(位带)技术

ARM Cortex-M3/M4的位带&#xff08;Bit-Band&#xff09;技术是一种内存映射技术&#xff0c;它允许对单个位进行直接操作&#xff0c;而不需要对整个字&#xff08;通常是32位&#xff09;进行操作。这项技术主要用于对特定的位进行高效的读写&#xff0c;特别是在需要对GPIO…...

【TOP】IEEE旗下1区,影响因子将破8,3个月录用,CCF推荐,性价比高!

计算机类 ● 好刊解读 IEEE出版社、中科院2区TOP&#xff0c;CCF推荐&#xff0c;今天推荐的期刊可谓buff叠满&#xff0c;好刊质量靠谱&#xff0c;有意向评职晋升毕业作者可重点关注&#xff1a; 01 期刊简介 ✅出版社&#xff1a;IEEE ✅影响因子&#xff1a;7.5-8.0 ✅…...

赚钱游戏 2.0.1 版 (资源免费)

没有c编辑器的可以直接获取资源来玩 #include <iostream> #include <string> #include <windows.h> #include <conio.h> #include <fstream> #include <ctime> #include <time.h> #include <stdio.h> #include <cstring&g…...

服务调用-微服务小白入门(4)

背景 各个服务应用&#xff0c;有很多restful api&#xff0c;不论是用哪种方式发布&#xff0c;部署&#xff0c;注册&#xff0c;发现&#xff0c;有很多场景需要各个微服务之间进行服务的调用&#xff0c;大多时候返回的json格式响应数据多&#xff0c;如果是前端直接调用倒…...

代码随想录算法训练营第三十六天| 435. 无重叠区间、 763.划分字母区间、56. 合并区间

435 题目&#xff1a; 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; …...

【AIGC调研系列】rerank3是什么

Rerank 3是一个针对企业搜索和检索辅助生成&#xff08;RAG&#xff09;系统优化的新型基础模型&#xff0c;它支持多语种、多结构数据搜索&#xff0c;并提供高精度的语义重排。通过这种方式&#xff0c;Rerank 3能够大幅提升响应准确度和降低延迟&#xff0c;同时大幅降低成本…...

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …...

在 VS Code 中使用 GitHub Copilot

Code 结合使用。 GitHub Copilot 是什么 GitHub Copilot 是一个可以帮助你更简单、更快速地编写代码的工具&#xff0c;由 GPT-3 提供支持。你只需编写所需代码的描述——例如&#xff0c;编写一个函数来生成一个随机数&#xff0c;或对一个数组进行排序——Copilot 就会为你…...

使用spring-ai快速对接ChatGpt

什么是spring-ai Spring AI 是一个与 Spring 生态系统紧密集成的项目&#xff0c;旨在简化在基于 Spring 的应用程序中使用人工智能&#xff08;AI&#xff09;技术的过程。 简化集成&#xff1a;Spring AI 为开发者提供了方便的工具和接口&#xff0c;使得在 Spring 应用中集…...

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…...

Mac开发者必备:OpenClaw调试QwQ-32B代码补全全流程

Mac开发者必备&#xff1a;OpenClaw调试QwQ-32B代码补全全流程 1. 为什么选择OpenClaw作为代码助手 作为一名长期在Mac上开发的全栈工程师&#xff0c;我一直在寻找能够真正融入工作流的智能编码工具。直到遇到OpenClaw&#xff0c;才发现这个开源的本地化AI智能体框架完美契…...

好用还专业!高效论文写作全流程AI论文网站推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。2026年AI论…...

中集集团2025年经营现金流翻倍增长至185亿,有息负债下降约48亿元

据3月27日年报显示&#xff0c;2025年中集集团经营质量持续提升&#xff0c;经营活动产生的现金流量净额大幅增长99.9%至185亿元&#xff0c;反映出主营业务回款能力增强与运营效率改善。与此同时&#xff0c;公司持续推进资产负债结构优化&#xff0c;年末有息债务规模下降至3…...

FGF-21蛋白的代谢调控机制与临床转化前景

一、引言成纤维细胞生长因子21&#xff08;FGF-21&#xff09;是成纤维细胞生长因子家族中的一种内分泌代谢调节因子。自其被发现以来&#xff0c;该蛋白因其在糖脂代谢、能量稳态调控及胰岛素敏感性改善等方面的独特作用&#xff0c;逐渐成为代谢性疾病研究领域的前沿热点。与…...

数字中国新引擎:产业经济大脑的全景式解构与深度洞察(PPT)

“中国经济高质量发展的核心命题&#xff0c;已从‘有没有’转向‘好不好’。而要回答‘好不好’&#xff0c;就必须构建一套能看清、看准、看远的‘经济慧眼’。”在数字经济成为国家战略主战场的今天&#xff0c;地方政府正面临着前所未有的治理挑战&#xff1a;宏观政策如何…...

5个维度解析:如何通过Excel可视化突破AI算法学习瓶颈

5个维度解析&#xff1a;如何通过Excel可视化突破AI算法学习瓶颈 【免费下载链接】ai-by-hand-excel 项目地址: https://gitcode.com/gh_mirrors/ai/ai-by-hand-excel 你是否也曾在学习AI算法时遇到这样的困境&#xff1a;面对满屏的数学公式感到无从下手&#xff0c;神…...

纯粹直播:革新直播观看体验的一站式跨平台解决方案

纯粹直播&#xff1a;革新直播观看体验的一站式跨平台解决方案 【免费下载链接】pure_live 纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/M38自定义源应有尽有。 项目地址: https://gitcode.com/gh_mirrors/pur/pure_live 您是否曾为在多个直播平台间频繁切换而感到困…...

LingBot-World:1秒生成16帧!开源世界模型新突破

LingBot-World&#xff1a;1秒生成16帧&#xff01;开源世界模型新突破 【免费下载链接】lingbot-world-base-cam 项目地址: https://ai.gitcode.com/hf_mirrors/robbyant/lingbot-world-base-cam 导语&#xff1a;Robbyant团队发布开源世界模型LingBot-World&#xff…...

如何用dpkg-architecture解决Debian软件包的多架构依赖问题?

深度解析dpkg-architecture&#xff1a;Debian多架构依赖管理的实战指南 在Debian软件包开发领域&#xff0c;多架构支持一直是开发者面临的复杂挑战之一。随着ARM架构的崛起和异构计算场景的普及&#xff0c;单一架构的软件包已经无法满足现代计算需求。本文将带您深入探索dpk…...

低成本搭建AI知识库:Qwen3-Embedding-4B量化版仅需3GB显存教程

低成本搭建AI知识库&#xff1a;Qwen3-Embedding-4B量化版仅需3GB显存教程 1. 引言&#xff1a;为什么选择Qwen3-Embedding-4B&#xff1f; 在构建AI知识库时&#xff0c;文本向量化模型的选择至关重要。传统方案要么性能不足&#xff0c;要么资源消耗过大。Qwen3-Embedding-…...