java 堆转储快照_捕获Java堆转储的7个选项

java 堆转储快照

堆转储是诊断与内存相关的问题的重要工件,例如内存泄漏缓慢,垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。

有很棒的工具,例如Eclipse MAT和Heap Hero,可以分析堆转储。 但是,您需要为这些工具提供以正确的格式和正确的时间点捕获的堆转储。

本文为您提供了捕获堆转储的多个选项。 但是,我认为前三个是有效的选择,而其他三个则是个不错的选择。

1. jmap

jmap打印堆转储到指定的文件位置。 该工具打包在JDK中。 可以在bin文件夹中找到它。

这是调用jmap的方法:

 jmap -dump:format=b,file=<file-path> <pid>  where  pid: is the Java Process Id, whose heap dump should be captured  file-path: is the file path where heap dump will be written in to. 

例:

1个 jmap -dump:format = b,file = / opt / tmp / heapdump.bin 37320

注意:传递“实时”选项非常重要。 如果通过此选项,则仅将内存中的活动对象写入堆转储文件。 如果未通过此选项,则所有对象,即使是准备好进行垃圾回收的对象也会打印在堆转储文件中。 它将大大增加堆转储文件的大小。 这也将使分析变得乏味。 为了解决内存问题或优化内存,仅“ live”选项就足够了。

2. HeapDumpOnOutOfMemoryError

当应用程序遇到java.lang.OutOfMemoryError时,理想的方法是立即捕获堆转储以诊断问题,因为您想知道java.lang.OutOfMemoryError发生时位于内存中的对象以及它们占用的内存百分比。 但是,由于当前的高温,大多数情况下,IT /运营团队会忘记捕获堆转储。 不仅如此,他们还重新启动了应用程序。 如果不及时捕获堆转储,就很难诊断出任何内存问题。

这就是该选项非常方便的地方。 在应用程序启动期间传递“ -XX:+ HeapDumpOnOutOfMemoryError”系统属性时,JVM将在JVM遇到OutOfMemoryError时捕获堆转储。

用法示例:

1个

注意:捕获的堆转储将在'-XX:HeapDumpPath'系统属性指定的位置打印。

最佳实践 :始终保持在所有应用程序中配置此属性,因为您永远不知道何时发生OutOfMemoryError.jcmd3。

3. jcmd

jcmd工具用于将诊断命令请求发送到JVM。 它打包为JDK的一部分。 可以在bin文件夹中找到它。

这是调用jcmd的方法:

1个

例:

1个jcmd 37320 GC.heap_dump /opt/tmp/heapdump.bin

4. JVisualVM

JVisualVM是一个监视,故障排除工具,打包在JDK中。 启动此工具时,您可以看到本地计算机上正在运行的所有Java进程。 您也可以使用此工具连接到在远程计算机上运行的Java进程。

脚步:

  1. bin文件夹下启动jvisualvm
  2. 右键单击其中一个Java进程
  3. 单击下拉菜单上的“堆转储”选项
  4. 将生成堆转储
  5. 将在“摘要”选项卡>“基本信息”>“文件”部分中指定生成堆转储的文件路径。
图:从JVisualVM捕获堆转储

5. JMX

有一个com.sun.management:type=HotSpotDiagnostic MBean 。 此MBean具有“ dumpHeap”操作。 调用此操作将捕获堆转储。 'dumpHeap'操作采用两个输入参数:

  1. outputFile:应将堆转储写入的文件路径
  2. live:传递“ true”时,仅捕获堆中的活动对象

您可以使用JMX客户端(例如JConsole, jmxsh和Java Mission Control)来调用此MBean操作。

图:使用Java Mission Control作为JMX客户端来生成堆转储

6.程序化方法

除了使用工具之外,您还可以以编程方式从应用程序中捕获堆转储。 在某些情况下,您可能希望基于应用程序中的某些事件来捕获堆转储。 这是Oracle的一篇好文章 ,通过调用com.sun.management:type=HotSpotDiagnostic MBean JMX Bean,提供了从应用程序捕获堆转储的源代码,我们在上述方法中对此进行了讨论。

7. IBM管理控制台

如果您的应用程序在IBM Websphere Application Server上运行,则可以使用管理控制台来生成堆。

脚步:

  1. 启动管理控制台
  2. 在导航窗格中,单击故障排除> Java转储和核心
  3. 选择要为其生成堆转储的server_name
  4. 点击堆转储产生堆转储您指定的服务器

您也可以使用wsadmin生成堆转储。

翻译自: https://www.javacodegeeks.com/2019/10/7-options-to-capture-java-heap-dumps.html

java 堆转储快照

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

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

相关文章

java 提取url参数_Java提取URL某个参数的值

ASP&period;NET Core 中文文档 第四章 MVC(4&period;3)过滤器原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...jquery插件-表单提交插件-jQuery&peri…

近似装箱问题(两种脱机算法实现)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在 理解 “近似装箱问题&#xff08;两种脱机算法实现&#xff09;” 的idea 并用源代码加以实现&#xff1b; 0.2&#xff09; 近似装箱问题的两种联机算法 分别是&am…

vaadin 10+_Vaadin 10+作为CUBA UI的未来

vaadin 10从一开始&#xff0c;Vaadin就成为CUBA平台用户界面的基石和重要组成部分。 凭借其创新的方法&#xff0c;它帮助CUBA将企业用户界面开发带到了一个非常有希望&#xff08;当今是默认&#xff09;的WEB领域。 Vaadin最令人兴奋的部分之一是整个开发都是同构的&#xf…

java 信息增益_对信息增益(IG,Information Gain)的理解和计算

可能理解的不对。决策树构建中节点的选择靠的就是信息增益了。信息增益是一种有效的特征选择方法&#xff0c;理解起来很简单&#xff1a;增益嘛&#xff0c;肯定是有无这个特征对分类问题的影响的大小&#xff0c;这个特征存在的话&#xff0c;会对分类系统带来多少信息量&…

使用文本编辑器和jdk_JDK 14:记录,文本块等

使用文本编辑器和jdk今天的Mark Reinhold帖子“ 建议JEP针对JDK 14&#xff1a;305、343、359、366和368 ”建议将另外五个JEP针对JDK 14 。 该组中有一些备受期待的功能&#xff0c;但建议将所有功能都“预览”或“孵化”&#xff1a; JEP 305 &#xff1a;instanceof的模式匹…

java compareable接口_Java对象比较-Comparable和Comparator接口使用

最近在学习贪心算法和动态规划的过程中&#xff0c;里面有一段自然排序的操作&#xff0c;顺便简单了解一下Java中对象比较后排序要使用的两个接口&#xff1a;Comparable和Comparator。如果是数字&#xff0c;直接比较就行&#xff0c;但是如果是对象&#xff0c;如何比较后排…

java初学者指南_Java代理初学者指南

java初学者指南尽管Java初学者很快学会了键入public static void main来运行他们的应用程序&#xff0c;但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支持&#xff1a; premain和agentmain方法。 这两种方法都允许所谓的Java代理在驻留在其自己的…

java txt html格式_java中xml(txt/html等格式)解析问题,请教java高手,请勿粘贴其他网页上的内容(能查的都看了)。...

目的&#xff1a;通过对网页内容解析&#xff0c;获得需要的内容&#xff0c;如网页的标题Title&#xff0c;主要内容&#xff0c;描述信息&#xff1b;而里面的广告、超链接、无关紧要的信息统统不要&#xff0c;从而达到对用户上网行为的分析的目的。下面是我...目的&#xf…

java泛型程序设计——定义简单泛型类+泛型方法

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java泛型程序设计 的 定义泛型类泛型方法的知识&#xff1b; 【1】一个泛型类&#xff1a; 就是具有一个或多个类型变量的类&#xff1b; 1.1&#xff09;看个荔枝&#xff1a; …

分布式 虚拟时间和虚拟同步_分布式虚拟跟踪

分布式 虚拟时间和虚拟同步跟踪提供了对系统的可见性&#xff0c;使开发人员和操作人员可以在运行时观察应用程序。 当系统不断增长并与更多微服务进行交互时&#xff0c;跟踪变得非常有价值。 在这样的环境中&#xff0c;这些痕迹非常棒&#xff0c;可以定位导致性能下降的故障…

java泛型程序设计——类型变量限定 + 泛型代码和虚拟机

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java泛型程序设计 的 类型变量限定 泛型代码和虚拟机 的知识&#xff1b; 【1】类型变量的限定 1.1&#xff09;类和方法需要对类型变量加以限定 1.1.1&#xff09;看个荔枝&a…

java中装饰器_Java设计模式12:装饰器模式

装饰器模式装饰器模式又称为包装(Wrapper)模式。装饰器模式以多客户端透明的方式扩展对象的功能&#xff0c;是继承关系的一个替代方案。装饰器模式的结构通常给对象添加功能&#xff0c;要么直接修改对象添加相应的功能&#xff0c;要么派生子类来扩展&#xff0c;抑或是使用对…

selenium 4_Selenium4 Alpha –期望什么?

selenium 4Selenium4 Alpha-期望什么&#xff1f; 早在2018年8月&#xff0c;整个测试自动化社区就受到了一个重大新闻的打击&#xff1a;Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重大更新。 世界最受欢迎的Web测试自动化…

英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析

【1】README 本文转自&#xff1a; http://www.cnblogs.com/lanke_2009/archive/2010/12/07/1899185.html &#xff0c; 旨在学习 英文论文中的 如 “such as, for example, e.g., i.e., etc., et al. ”的用法&#xff1b; 【2】正文如下&#xff1a; 黄龙旺  龚汉忠 (上…

mysql8.0云时代_8.0.22Mysql的详细安装

Mysql8.0.22的安装和常见问题前言提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考一、MySQL的下载和安装&#xff1f;1.mysql官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/2.下载步骤&#xff1a;可以点击Go to download page 去下载32位的…

java泛型程序设计——翻译泛型表达式+翻译泛型方法

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java泛型程序设计 的 翻译泛型表达式翻译泛型方法 的知识&#xff1b; 【1】翻译泛型表达式 1.1&#xff09;当程序调用泛型方法时&#xff0c; 如果擦除了泛型返回类型&#xf…

redis 受攻击怎么办?_最受欢迎的6个最常用的Redis库

redis 受攻击怎么办?Redis当前是世界上最受欢迎的键值商店&#xff0c; 它通过提供高速度和低延迟以及针对应用程序开发人员的灵活功能集&#xff0c;赢得了广泛的采用率 。 Redis是一个内存中的数据结构存储&#xff0c;用作根据BSD许可分发的数据库&#xff0c;缓存和消息代…

java泛型程序设计——调用遗留代码

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java泛型程序设计 的 调用遗留代码 的知识&#xff1b; 【1】调用遗留代码相关 1.1&#xff09;设计java 泛型的目的&#xff1a; 允许泛型代码和遗留代码间能够相互操作&#…

java oracle 字符_Oracle转义字符

1、oracle 特殊字符 转义关键词&#xff1a; oracle 转义环境&#xff1a;oracle 9i plsql在plsql里边执行:update userinfo set pageurlmyjsp?page1&pagesize10 where idtest这条sql语句往数据库的pageurl字段放进去了一个url地址&#xff0c;但是执行的时候却并非那…

jmeter进行性能测试_使用JMeter进行性能测试

jmeter进行性能测试在开发复杂的高可用性软件项目时&#xff0c;性能至关重要。 在当今这样的时代尤其如此&#xff0c;除了闪电般的实时数据可访问性之外&#xff0c;其他任何事情都受到惩罚。 当谈论有时需要的大量数据时&#xff0c;这并非总是一件容易的事。 在本文中&…