Arthas实战(2)- OOM问题排查

news2024/10/6 19:15:13

一、 准备测试应用

  1. 新建一个 SpringBoot应用,写一段有 OOM bug 的代码:
@RestController
@RequestMapping
public class JvmThreadController {

    List<TestWrapper> memoryList = new ArrayList<>();

    @GetMapping("/test")
    public String memoryTest(@RequestParam("count") Integer count) {
        for (int i = 0; i < count; i++) {
            byte[] b = new byte[1024];
            memoryList.add(new TestWrapper(b));
        }
        return "success";
    }

    static class TestWrapper{
        byte[] b;

        public TestWrapper(byte[] b) {
            this.b = b;
        }
    }
} 
  1. 调整JVM参数,可以快速 OOM
    -Xmx50m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/java/

  2. 调用memoryTest接口,项目 OOM
    在这里插入图片描述

二、使用Arthas排查问题

  1. 启动 Arthas:
    java -jar arthas-boot.jar

  2. 查看内存使用情况
    dashboard
    在这里插入图片描述

  3. 使用Arthas生成火焰图

  • 开始生成:profiler start --event alloc
    在这里插入图片描述

  • 查看采集的sample的数量:profiler getSamples
    在这里插入图片描述

  • 停止采集,并生成html文件,可以指定文件存放地址:`profiler stop --format html --file /java/output.html
    在这里插入图片描述

  1. 分析火焰图
    在这里插入图片描述
    在这里插入图片描述
    根据火焰图可以看出问题,是com/arthas/demo/controller/JvmThreadController.memoryTest方法有问题,并且和byte[]有关

三、另一种排查方式

  1. 使用jps命令查看项目进程
    在这里插入图片描述

  2. 使用jmap -histo:live 37446 | grep demo命令查询堆内存中的对象分配统计信息,通过jmap命令配合-histo:live选项获取的,它展示了指定Java进程(PID为37446)的存活对象直方图。
    在这里插入图片描述

    命令解释:

    • jmap: 是一个JDK自带的命令行工具,用于打印堆内存的详细信息,包括堆内存使用情况、dump堆内存到文件等。
    • histo:live: 参数指定只统计活动对象(即未被垃圾回收器标记为可回收的对象)的信息。
    • 37446:PID
    • grep:执行搜索命令。
    • demo:是要搜索的模式或字符串。在这里,我希望查找那些输出行中包含 “demo” 字符串的行。

    输出解读:

    • 第一列:19, 这是一个索引编号,表示列表中的第19个条目。
    • 第二列:4200, 实例数量,即堆中有4200个com.arthas.demo.controller.JvmThreadController$TestWrapper类型的对象。
    • 第三列:67200, 占用内存大小,单位是字节,表明这4200个TestWrapper实例总共占用了67,200字节的堆空间。

jmap -histo:live 37446 | grep demo命令默认是按照实例数量倒序排序的,但是有可能会出现大量数据,所以我们可以把命令优化成按照实例数量倒序排序,并且只取前 15 条数据:
jmap -histo:live 7 | awk '/demo/ {print $1, $2, $3, $4}' | sort -k2,2rn | head -n 15

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

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

相关文章

年份与产地:解锁红酒的秘密密码

在红酒的世界里&#xff0c;年份与产地如同两把神秘的钥匙&#xff0c;它们背后隐藏着红酒不同的魅力与秘密。今天&#xff0c;就让我们一起揭开这层神秘的面纱&#xff0c;探寻年份与产地如何为红酒赋予不同的灵魂&#xff0c;特别是以雷盛红酒为例&#xff0c;感受那份从岁月…

十 .pfc,bus纹波分析与抑制方法

以apfc为例 在分析时用 uin 和 iin 表示输入电压和输入电流&#xff0c;uo 和 io&#xff0c;表示输出电压和输出电流&#xff0c;Uin 和 Iin 表示输入电压和输入电流的幅值&#xff0c;则输入电压和输入电流可以分别表示为&#xff1a; 从式&#xff08;3-3&#xff09;可以…

Python28-1 机器学习算法之决策树

决策树&#xff08;Decision Tree&#xff09; 决策树算法是一种常用的机器学习算法&#xff0c;属于监督学习范畴。它可以用于分类和回归任务&#xff0c;具有易于理解和解释的特点。决策树通过递归将数据分割成更小的子集&#xff0c;构建一个树形结构&#xff0c;其中每个节…

KV260视觉AI套件--PYNQ-DPU-Resnet50

目录 1. 简介 2. 代码解析 3. 全部代码展示 4. 总结 1. 简介 本文以 Resnet50 为例&#xff0c;展示使用 PYNQ 调用 DPU 运行 Resnet50 网络的详细过程&#xff0c;并对其中关键代码做出解释。 PYNQ是一个针对Xilinx Zynq平台的Python开发框架&#xff0c;它允许开发者使…

学校教室NTP电子钟时间是如何同步北京时间的?-讯鹏时钟

在学校教室里&#xff0c;NTP 电子钟精准地显示着时间&#xff0c;与北京时间保持高度同步&#xff0c;为师生们提供了可靠的时间参考。那么&#xff0c;它是如何做到这一点的呢&#xff1f; NTP 电子钟能够与北京时间同步&#xff0c;主要依赖于网络时间协议&#xff08;NTP&a…

准化 | 水系统碳中和标准体系初见成效

2024年5月31日&#xff0c;中华环保联合会发布《团体标准公告 2024年第10号&#xff08;总第78号&#xff09;》&#xff0c;批准发布了由中华环保联合会提出并归口的《废水处理温室气体监测技术规程》(T/ACEF 142-2024)、《工业水系统碳排放核算方法与报告指南》(T/ACEF143-20…

数据驱动:Facebook的广告策略与商业模式

在现代数字经济中&#xff0c;数据已经成为新的石油&#xff0c;驱动着企业的增长和创新。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;充分利用其庞大的用户数据和先进的算法技术&#xff0c;建立了一个高度精确和高效的广告生态系统。这不仅推动了平台自…

qtreewidget 美化,htmlcss和qss 不是一个概念!已解决

这种样式的美化&#xff0c; 能气死个人&#xff0c;css 一个单词搞定&#xff0c;非要 在qss中。多少个单词不知道了。 m_tree_widget->setStyleSheet("QTreeView{background:transparent; selection-background-color:transparent;}""QTreeView::branch{b…

PyTorch之nn.Module与nn.functional用法区别

文章目录 1. nn.Module2. nn.functional2.1 基本用法2.2 常用函数 3. nn.Module 与 nn.functional3.1 主要区别3.2 具体样例&#xff1a;nn.ReLU() 与 F.relu() 参考资料 1. nn.Module 在PyTorch中&#xff0c;nn.Module 类扮演着核心角色&#xff0c;它是构建任何自定义神经网…

这次发现的开源版本我愿意称之为最具学习价值的商城系统|商城源码点击进入

这是一款我发现的强大、灵活、易用的商城系统&#xff0c;成为我的的首选商城框架&#xff0c;让我的商城开发事半功倍&#xff01;这款开源商城项目具有多元的商业模式满足了任何使用场景的需求。 有S2B2C供应链商城、B2B2C多商户商城、O2O外卖商城、B2C单商户商城、社区团购、…

全网最详细,零基础学会AI绘画Stable Diffusion,学不会来打我!

前言 什么是Stable Diffusion 自从去年10月份Stable Diffusion开源以来&#xff0c;仅过了半年的时间&#xff0c;如今它已经能够创作出精美细致的二次元插画&#xff0c;媲美真人的赛博Coser&#xff0c;以及具有独特风格的AI动画。 无论你只是感兴趣&#xff0c;还是想了解…

旅游管理系统-计算机毕业设计源码16021

摘 要 本文旨在设计和实现一个基于Spring Boot框架的旅游管理系统。该系统通过利用Spring Boot的快速开发特性和丰富的生态系统&#xff0c;提供了一个高效、可靠和灵活的解决方案。系统将实现旅游景点信息的管理、线路规划、跟团游玩、旅游攻略、酒店信息管理、订单管理和用户…

有哪些手持小风扇品牌推荐?五大手持小风扇诚意推荐!

在炎炎夏日&#xff0c;一款便携且高效的手持小风扇无疑是消暑的必备神器。为了帮助大家轻松应对酷暑&#xff0c;我们精心挑选了五大手持小风扇品牌进行诚意推荐。这些品牌不仅拥有出色的降温效果&#xff0c;更在外观设计、便携性、续航能力及操作便捷性上表现卓越。接下来&a…

第三方软件测试公司分享:软件渗透测试的测试内容和注意事项

软件渗透测试是一种通过模拟攻击的方式来评估软件系统的安全性和漏洞&#xff0c;以发现并修复系统中的安全弱点。保护用户的数据和信息不被恶意攻击者利用&#xff0c;也是软件产品开发流程中重要的环节&#xff0c;可以帮助开发团队完善产品质量&#xff0c;提高用户满意度。…

代码随想录-二叉搜索树①

目录 二叉搜索树的定义 700. 二叉搜索树中的搜索 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 98. 验证二叉搜索树 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 530. 二叉搜索树的最小绝对差 题目描述&#x…

03:Spring MVC

文章目录 一&#xff1a;Spring MVC简介1&#xff1a;说说自己对于Spring MVC的了解&#xff1f;1.1&#xff1a;流程说明&#xff1a; 一&#xff1a;Spring MVC简介 Spring MVC就是一个MVC框架&#xff0c;Spring MVC annotation式的开发比Struts2方便&#xff0c;可以直接代…

c/c++语言的一种日志的编写办法

今日分享一下&#xff0c;从某源码中看到这种日志编写方式&#xff0c;很强。可以借鉴。 这个函数调用的日志函数是不一样的&#xff0c;仔细观看&#xff1a; 这几种日志输出函数&#xff0c;背后都调用了相同的调用。 与之对应的区别就是&#xff0c;函数名称的差异取决于…

【云原生监控】Prometheus 普罗米修斯从搭建到使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…

【Python基础篇】一篇文章入门Python,进入Python的世界

文章目录 0.前言1.打印&#xff08;Hello&#xff0c;World&#xff09;2.创建变量3.打印升级3.1 打印一句话中间加变量3.2 sep设置分隔符3.3 end和换行 4. 注释 0.前言 大家好&#xff0c;我是小辰&#xff0c;前几天做了个重大的决定&#xff0c;学习python。 首先&#xff0…

wine烧录stm32教程

前言 使用环境 ubuntu22.04 因为stlnk的线太短了并且容易扯断开&#xff0c;想使用串口进行烧录&#xff0c;但是又不想每次烧录代码都拔下短接帽(暂时不知道stm32flash怎么支持ISP一键下载)&#xff0c;故写下此教程步骤一:安装wine 首选我们要下载wine&#xff0c;由于国内下…