loggers 显示和修改配置的loggers,比较简单,亲自调用看下接口信息即可 false heapdump dump 包含应用的 JVM 堆信息 true ID 描述 敏感(Sensitive) heapdump 第一步:下载heapdum文件以及配置根路劲操作 接口样例:http://localhost:8060/heapdump 当然,也可以进行设置监控服务访问根路径(如果不设置默认直接 则我们访问所有的监控服务接口路劲为: http://localhost:8060/actuator/heapdump 开发环境可以直接直接在浏览器地址栏中粘贴上面url信息进行下载heapdump文件即可 下载地址: curl -o xxx.zip http://${host}:${port}/heapdump ### xxx.zip后缀可以任意指定常规的压缩包后缀即可,如:tar.gz/zip/gzip
jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务。
超类及静态字段 3、垃圾回收的根对象 :根对象是指那些可以直接被虚拟机触及的对象 4、线程栈及局部变量 :转储时刻的线程调用栈信息和栈帧中的局部变量信息 其实,针对HeapDump [administrator@JavaLangOutOfMemory ~ ] % jcmd <pid> GC.heap_dump /data/logs/heapdump.bin 4、JVisualVM
//http://androidxref.com/7.1.1_r6/xref/external/avahi/avahi-compat-howl/text-test.c#33
一、使用Spring Boot Actuator生成HeapDump文件 参考我前面的文章Java|使用Spring Boot Actuator监控应用 访问http://localhost:1001 /monitor/actuator/heapdump即可生成heapdump文件。
在攻防场景里经常会遇到Actuator配置不当的情况,攻击者可以直接下载heapdump堆转储文件,然后通过一些工具来分析heapdump文件,从而可进一步获取敏感信息。 (1)通过jvisualvm加载heapdump文件 (2)切换到OQL控制台标签,Springboot heapdump端点存在版本差异,构建OQL语句进行关键字查询,从而获取明文密码。 (1)使用jhat命令分析heapdump文件,启动一个端口为7000的http服务。备注:jhat 后面可配置jvm参数,避免heapdump文件占用过大内存。 03、heapdump_tool 敏感信息查询工具 本质上是基于jhat,通过通过jhat解析heapdump文件,从而实现heapdump敏感信息搜索。 下载地址: https://toolaffix.oss-cn-beijing.aliyuncs.com/heapdump_tool.jar 利用自动化工具,快速搜索查找密码明文,AK-SK等。
一、引言 1、为什么要获取heapdump文件 heapdump文件是Java应用遭遇OOM后的诊断报告,记录了某一时刻 JVM 堆中对象的详细使用情况,是 JVM 堆内存的一个快照。 结合实际情况,准备使用DaemonSet部署一个heapdump-watcher应用,通过它来监听heapdump.prof文件实现自动化管理。 Tips:该方法仅适合将heapdump.prof持久化到K8s节点的场景。但是具有一定的参考意义。 3、实施前提 该方案需要以下前提: heapdump.prof文件持久化到K8s节点。 >heapdump.prof。 为了节约节点磁盘空间,当heapdump.prof文件上传完成后清理本地文件。 为了让相关开发人员了解到新的heapdump.prof文件已经生成,我们通过企业微信机器人通知到对应的开发群。
heapdump分析工具是一款强大的数据分析工具,它可以用图表的形式来展现相应的分析结果,在使用heapdump分析工具之前请先安装JDK1.6。 in thread “main” java.lang.NoClassDefFoundError: java/util/regex/PatternSyntaxException 2.运行需要足够大的内存 Heapdump 如果在解析heapdump文件时出现java.lang.OutOfMemoryError的报错: 请尝试最大堆大小(-Xmx)值给JVM更多的内存。 也可以通过命令行的方式直接打开heapdump文件: java -Xmx3000m -jar ha396.jar heapdump.20120503.170018.1510.0003.phd 其中,Xmx3000m 打开heapdump文件后的效果图,可以选择多种视图进行分析,Tree View,Objects List等等。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。
@toc二、命令列表2.1 jvm相关命令2.1.8 heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)基本用法:heapdump options <file-path 举例1:假设你想生成一个只包含活动对象的堆转储文件,并将其保存为 /tmp/heapdump.hprof基础语法:heapdump --live 指定输出的路径及文件名heapdump --live / tmp/heapdump.hprof举例2:如果你想要进一步定制堆转储文件的内容,比如只包含特定类的对象,并且以二进制格式存储基础语法:heapdump --live --include-class=指定类的全路径 如果你不确定如何使用某个选项,可以使用 help heapdump 命令查看详细的帮助信息。 Arthas sysenv(查看JVM的环境变量)7.Arthas vmoption(查看和修改 JVM里诊断相关的option)8.Arthas getstatic(查看类的静态属性 )9.Arthas heapdump
因此,我更倾向于使用后者,因为它能够准确地在微服务发生OOM时触发heapdump。 ,此外,运维通常需要打包heapdump文件,拉取并发送给开发人员,这种工作不仅枯燥乏味,还容易让运维人员感到心累。 因此,我们希望在 OOM 生成 heapdump 文件时,不再依赖持久化存储,并能够将 heapdump 文件的下载链接直接推送给开发人员。本文将详细介绍如何实现这一目标。 开发人员可以自行下载 heapdump 文件,无需为 Pod 挂载持久化存储,也无需运维人员的手动操作。效果图如下: 03、操作步骤 1. dump2minio.sh完整脚本内容请点击 《OOM heapdump自动化脚本》
对象 HeapDump heapDump = heapDumpBuilder.heapDumpFile(heapDumpFile).referenceKey(reference.key @Override public void analyze(@NonNull HeapDump heapDump) { checkNotNull(heapDump, "heapDump public static void runAnalysis(Context context, HeapDump heapDump, Class<? heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer = new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses); //
生成 heapDump HeapDump中本身没有什么逻辑,主要是封装了HeapDump的各种参数。 heapDump) { } }; void analyze(HeapDump heapDump); } /** The heap dump file, which heapDump) { checkNotNull(heapDump, "heapDump"); HeapAnalyzerService.runAnalysis(context, heapDump = "heapdump_extra"; public static void runAnalysis(Context context, HeapDump heapDump, Class heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer =
heapDump) { checkNotNull(heapDump, "heapDump"); HeapAnalyzerService.runAnalysis(context, heapDump heapDump, Class<? heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); //关键1 HeapAnalyzer heapAnalyzer = new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses); //关键 2 AnalysisResult result = heapAnalyzer.checkForLeak(heapDump.heapDumpFile, heapDump.referenceKey,
(HeapDump heapDump) { checkNotNull(heapDump, "heapDump"); HeapAnalyzerService.runAnalysis(context , heapDump, listenerServiceClass); } heapdumpListener是HeapDump的内部接口。 heapDump, Class<? heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer = (heapDump.heapDumpFile, heapDump.referenceKey, heapDump.computeRetainedHeapSize); AbstractAnalysisResultService.sendResultToListener
heapDump) { checkNotNull(heapDump, "heapDump"); HeapAnalyzerService.runAnalysis(context, heapDump = "heapdump_extra"; public static void runAnalysis(Context context, HeapDump heapDump, Class heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer = new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses); // 开始分析 AnalysisResult result = heapAnalyzer.checkForLeak(heapDump.heapDumpFile, heapDump.referenceKey
IBM HeapAnalyzer 更多信息见官方网站 在我们的应用程序发生内存泄露的时候,会生成heapdump文件,文件名字类似于这样:heapdump.20081105.031129.172870 .phd,即heapdump. heapdump文件是指定时刻的Java堆栈的快照,是一种镜像文件。 启动该软件的方式: 启动后的界面如下,使用open file菜单,浏览打开我们需要进行内存堆栈分析的heapdump文件: Heapdump文件都比较大,打开的时候比较长,推荐在配置比较好的机器上进行堆栈分析 在生成heapdump文件的时候,一般会生成javacore文件。
官方地址:https://github.com/bnoordhuis/node-heapdump 这个模块的使用非常简单。 安装 npm install heapdump //如果遇到权限问题, 可以使用 npm install heapdump --unsafe-perm 在代码中引入 const heapdump = require('heapdump'); 既然要使用 node-heapdump 对内存泄露进行定位,我需要先构造一个有问题的代码,然后最终已服务的形式启动。 heapdump.writeSnapshot(function(err, filename) { console.log('dump written to', filename); }); 命令写入 快照将会存储在文件目录下以 heapdump-<sec>.
heapDump) { checkNotNull(heapDump, "heapDump"); // HeapAnalyzerService 将运行在另外一个独立的进程中 HeapAnalyzerService.runAnalysis HeapAnalyzerService.runAnalysis public static void runAnalysis(Context context, HeapDump heapDump, heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer = new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses); // 分析内存,查找内存泄漏点以及引用链 AnalysisResult result = heapAnalyzer.checkForLeak(heapDump.heapDumpFile, heapDump.referenceKey,
heapDump) { checkNotNull(heapDump, "heapDump"); // HeapAnalyzerService 将运行在另外一个独立的进程中 HeapAnalyzerService.runAnalysis HeapAnalyzerService.runAnalysis public static void runAnalysis(Context context, HeapDump heapDump, heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); HeapAnalyzer heapAnalyzer = new HeapAnalyzer(heapDump.excludedRefs, this, heapDump.reachabilityInspectorClasses); // 分析内存,查找内存泄漏点以及引用链 AnalysisResult result = heapAnalyzer.checkForLeak(heapDump.heapDumpFile, heapDump.referenceKey,
构建一个代表hprof文件的HeapDump对象 HeapDump heapDump = heapDumpBuilder.heapDumpFile(heapDumpFile).referenceKey (this); // 创建一个HeapDump对象 } // HeapDump的构造函数 HeapDump(Builder builder) { this.heapDumpFile { checkNotNull(heapDump, "heapDump"); HeapAnalyzerService.runAnalysis(context, heapDump, listenerServiceClass heapDump = (HeapDump) intent.getSerializableExtra(HEAPDUMP_EXTRA); // 1. (heapDump); // 1.