https://www.cnblogs.com/kuroro/p/11707951.html

JVM提供了有用的参数来处理OutOfMemoryError。在本文中,我们要强调那些JVM参数。在对OutOfMemoryError进行故障排除时,它可能对您很方便。这些JVM参数是:

  1. -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath
  2. -XX:OnOutOfMemoryError
  3. -XX:+ ExitOnOutOfMemoryError
  4. -XX:+ CrashOnOutOfMemoryError

让我们在本文中详细讨论这些JVM参数。

(1) -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath

堆转储基本上是内存的快照。它包含有关内存中存在的对象,这些对象中存在的实际数据,这些对象的引用的详细信息。堆转储是解决内存问题的重要工具。

为了诊断OutOfMemoryError或任何与内存相关的问题,必须在应用程序开始遇到OutOfMemoryError之前或此刻捕获堆转储。很难在适当的时候手动捕获堆转储,因为我们不知道何时会抛出OutOfMemoryError。但是,在命令行中启动应用程序时,可以通过传递以下JVM参数来自动执行捕获堆转储的操作:

-XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH}

例:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof

在“ -XX:HeapDumpPath”中,您需要指定堆转储存储的文件路径。

传递这两个JVM参数时,将在抛出OutOfMemoryError时自动捕获堆转储并将其写入指定的文件路径。

捕获堆转储后,可以使用HeapHero和 Eclipse MAT之类的工具 来分析堆转储。

(2)-XX:OnOutOfMemoryError

您可以将JVM配置为在抛出OutOfMemoryError时调用任何脚本。大多数情况下,OutOfMemoryError不会使应用程序崩溃。但是,一旦发生OutOfMemoryError,最好重新启动应用程序。因为OutOfMemoryError可能会使应用程序处于不稳定状态。来自不稳定的应用程序实例的请求可能会导致错误的结果。

例:

-XX:OnOutOfMemoryError=/scripts/restart-myapp.sh

传递此参数时,每当抛出OutOfMemoryError时,JVM就会调用“ /scripts/restart-myapp.sh”脚本。在此脚本中,您可以编写代码以优雅地重新启动应用程序。

(3)-XX:+ CrashOnOutOfMemoryError

当您传递此参数时,JVM将在抛出OutOfMemoryError时立即退出。除了退出之外,JVM还会生成文本和二进制崩溃文件(如果启用了核心文件)。但就我个人而言,我不希望配置该参数,因为我们应该始终以实现正常退出为目标。突然退出可能/将危害正在进行的交易。

我运行了一个使用此'-XX:+ CrashOnOutOfMemoryError'参数生成OutOfMemoryError的应用程序。当抛出OutOfMemoryError时,我可以看到JVM立即退出。以下是标准输出流中的消息:

Aborting due to java.lang.OutOfMemoryError: GC overhead limit exceeded
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (debug.cpp:308), pid=26064, tid=0x0000000000004f4c
# fatal error: OutOfMemory encountered: GC overhead limit exceeded
#
# JRE version: Java(TM) SE Runtime Environment (8.0_181-b13) (build 1.8.0_181-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.181-b13 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:workspacetier1app-svntrunkbuggyapphs_err_pid26064.log
#
# If you would like to submit a bug report, please visit:
# http:
#

从该消息中,您可以在“ C:workspacetier1app-svntrunkbuggyapphs_err_pid26064.log”中看到要生成的hs_err_pid文件。hs_err_pid文件包含有关崩溃的信息。您可以使用诸如fastThread之类的工具 来分析hs_err_pid文件。但是hs_err_pid中存在的大多数时间信息都是非常基本的。不足以对OutOfMemoryError进行故障排除。

(4)-XX:+ ExitOnOutOfMemoryError

传递此参数时,抛出OutOfMemoryError时,JVM将立即退出。如果您想终止应用程序,则可以传递此参数。但就我个人而言,我不希望配置该参数,因为我们应该始终以实现正常退出为目标。突然退出可能/将危害正在进行的交易。

我使用此'XX:+ ExitOnOutOfMemoryError'JVM参数运行了相同的内存泄漏程序。与“ -XX:+ CrashOnOutOfMemoryError”不同,此JVM参数不会生成任何文本/二进制文件。JVM刚刚退出。

[转帖]OutOfMemory JVM参数一览的更多相关文章

  1. [转帖]微软 SQ1 参数一览:8 核 Kryo 495,Adreno 685 GPU

    微软 SQ1 参数一览:8 核 Kryo 495,Adreno 685 GPU http://www.myzaker.com/article/5d989ef68e9f0977765e5506/ 微软发 ...

  2. JVM参数配置 java内存区域

    java内存区域 一些基本概念 http://www.importnew.com/18694.html https://www.cnblogs.com/wangyayun/p/6557851.html ...

  3. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

  4. jvm参数设置和性能调优

    1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB):默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40% ...

  5. 服务器jvm参数配置

    Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) s ...

  6. Java 6 JVM参数选项大全(中文版)

    原文来自: http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm 本文是基于最新的SUN官方文档Java SE 6 Hotsp ...

  7. jinfo_动态调整JVM参数(无需重启)(实践)

    ​本文演示在JVM进程运行过程中动态开启/关闭 GC输出,无需重启JVM进程 jinfo使用介绍 可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数 -flag < ...

  8. JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈

    查看线上日志,遇到一个诡异的问题,就是系统大量空指针的异常,但是没有打印堆栈,导致不方便定位问题. 经过一番代码调试,确定并非程序代码问题.没有线索之后,从Google找到了答案:是因为在server ...

  9. tomcat,zookeeper,activeMQ,Kafka设置jvm参数

    1,tomcat设置jvm参数 设置方法:   在tomcat bin 目录增加配置:setenv.sh   #add tomcat pid CATALINA_PID="$CATALINA_ ...

  10. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...

随机推荐

  1. vue 2实战系列 —— 复习Vue

    复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...

  2. Centos7安装高版本BIND9.16.41(DNS服务器)

    安装高版本BIND9.16.41或9.18.15 双数版本为稳定版如9.16.9.18 使用手册:https://bind9.readthedocs.io/en/v9_16_19/reference. ...

  3. CodeForces 1453D 概率 期望

    CodeForces 1453D Checkpoints 概率 期望 原题链接 题意 现在我们可以设计n个擂台,有的是激活点,有的不是.从第一个开始挑战,每次都有1/2的概率成功,如果该点成功,则跳到 ...

  4. 十分钟从入门到精通(下)——OBS权限配置

    上一篇我们介绍了OBS权限管理中统一身份认证和企业项目管理,本期我们继续介绍OBS权限管理中的高级桶策略和ACL应用.   您是否也遇到过类似的问题或者困扰? 1.隔壁的主账户给了子用户创建一个桶,但 ...

  5. 简化业务代码开发:看Lambda表达式如何将代码封装为数据

    摘要:在云服务业务开发中,善于使用代码新特性,往往能让开发效率大大提升,这里简单介绍下lambad表达式及函数式接口特性. 1.Lambda 表达式 Lambda表达式也被称为箭头函数.匿名函数.闭包 ...

  6. 5步教你将MRS数据导入DWS

    摘要:GaussDB(DWS)支持在相同网络中,配置一个GaussDB(DWS)集群连接到一个MRS集群,然后将数据从HDFS中的文件读取到GaussDB(DWS). MapReduce服务(MapR ...

  7. Java的这个强大功能,很多人都不知道

    摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...

  8. XEngine:深度学习模型推理优化

    摘要:从显存优化,计算优化两个方面来分析一下如何进行深度学习模型推理优化. 本文分享自华为云社区<XEngine-深度学习推理优化>,作者: ross.xw. 前言 深度学习模型的开发周期 ...

  9. 火山引擎AB测试:企业产品优化主题分享在北京举办

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台在北京举办了"超话数据:企业产品优化分享"的活动.该活动邀请了火山引擎的 ...

  10. 高性能 Jsonpath 框架,Snack3 v3.2.44 发布

    Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...