与OutOfMemoryError相关的JVM参数

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

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

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

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之类的工具来分析堆转储。

-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  #  .0_181-b13) (build # JRE version: Java(TM) SE Runtime Environment ( 8 .0_181-b13) (build 1.8 .0_181-b13)  -Bit Server VM ( # 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 # Failed to write core dump. Minidumps are not enabled by  #  # 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:  //bugreport.java.com/bugreport/crash.jsp #  http: //bugreport.java.com/bugreport/crash.jsp  # 

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

-XX:+ ExitOnOutOfMemoryError

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

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

翻译自: https://www.javacodegeeks.com/2019/10/outofmemoryerror-related-jvm-arguments.html

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

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

相关文章

This beta version of Typora is expired, please download and install a newer;解决方法

亲测可行的方法,方便永久 1.打开注册表 cmd(Win R)–>regedit 2.修改Typora权限 计算机\HKEY_CURRENT_USER\Software\Typora 右键Typora选择权限打开,然后选择拒绝 注意需要选择好组与用户名【最直接的就是所有用户与组均点…

IEEE在指定期刊下搜索相关论文

在左边Publication Title中直接输入目标期刊,搜索后结果显示指定期刊下文章

操作方法:Spring Boot和Thymeleaf与Maven

Spring Boot是一款出色的软件,可让您在几秒钟内引导Spring应用程序。 它确实有效。 尽可能少的配置即可上手。 而且仍然可以更改默认值。 让我们看看用Thymeleaf和Maven引导Spring MVC并在IntelliJ中使用它是多么容易。 Spring MVC Thymeleaf与Maven的基本设置 确…

Ubuntu安装VSCode

1. 一般方法: 首先是进入到vscode官网:https://code.visualstudio.com/Download ,选择.deb包下载 但是下载deb包时,速度很慢而且一直提示“网络连接已断开” 2. 解决办法: 将下载地址中 az764295.vo.msecnd.net 替换…

如何在Java中使用正则表达式?

正则表达式是用于文本搜索的非常重要的工具。 以下是用于执行正则表达式搜索并基于正则表达式捕获字符串的不同部分的代码段 public class RegexTest { public static void main(String[] args) { String name "01_My-File.pdf" ; match(name); match( "09_03_…

xxx is not in the sudoers file.This incident will be reported错误

一 问题解决 在执行sudo命令时会有如下提示: xx is not in the sudoers file. This incident will be reported. 原因分析:一般这种情况是创建了新用户,没有对应修改sudoers文件或者group文件。 解决方法: 方法1:…

Ubuntu压缩与解压文件

tar -xvf FileName.tar # 解包tar -cvf FileName.tar DirName # 将DirName文件打包 注意 -c create -x extract

java字节码_好的,每个接触Java字节码的人

java字节码Oracle诉Google一案认为,复制Java API的结构,序列和组织是侵犯版权的行为。 侵犯版权不仅是复制行为,而且还适用于拥有该作品副本的所有中间方。 那就是编写/编译任何JVM语言的人,以及在他们拥有的任何设备上都有JAR文…

使用WireMock进行更好的集成测试

无论您是遵循传统的测试金字塔还是采用诸如“ 测试蜂窝”这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试。 您可以编写不同类型的集成测试。 从持久性测试开始,您可以检查组件之间的交互,也可以模拟调用外部服务。 本文将讨论…

Acwing刷题第一节

756 题目分析 &#xff1a; 要点如下&#xff1a; 1. 矩阵遍历&#xff1a;确定遍历方向 2. 确定遍历边界 #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N 110; int n,m; int res[N][N];int main() {…

Jetty,Java和OAuth入门

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 Jetty是一个小型&#xff0c;高度可扩展的基于Java的Web服务器和servlet引擎。 它支持HTTP / 2&#xff0c;WebSocket…

vscode 设置 sublime 的主题

vscode 怎么设置 sublime 的主题&#xff1f; VsCode中提供多种主题样式&#xff0c;供使用者选择。 由于习惯于Sublime默认主题&#xff0c;因此将VsCode主题更换为Sublime默认主题。 首先点击编辑器顶部导航菜单中的【文件】&#xff1b; 然后点击【首选项】下【颜色主题】…

VsCode与Sublime编辑器优缺点对比

一 VS code与Sublime共同点 文本功能强大&#xff0c;支持各种语言高亮支持编译&#xff0c;且可以在控制台看到输出可安装大量插件 二 VsCode优点 1. 插件管理成熟 插件很多&#xff0c;近vscode发展势头猛&#xff0c;安装插件方便简单&#xff0c;有插件的详细介绍 vscode新…

spring预加载与懒加载_通过Spring将继承树加载到List中

spring预加载与懒加载我注意到有趣的Spring功能。 我的一位同事使用它将Spring Bean的整个继承树加载到列表中。 在学习Spring文档时错过了这一点。 让我们来看看Spring bean的继承树&#xff1a; 下面的代码片段是通过构造函数注入将此豆树加载到列表中的&#xff1a; Comp…

VsCode连接远程服务器并修改文件代码

一 插件安装配置 1. 安装远程开发插件Remote Development&#xff0c;在商店中搜索Remote Development并安装。 2、选择SSH Targets 安装完成后&#xff0c;vscode左侧多出了一个菜单栏&#xff0c;我们点击配置按钮配置远程服务器的地址。选择SSH Targets。 二 远程服务器配…

Java和Round-Robin上的AtomicInteger

AtomicInteger属于Atomic Variables族。 主要好处是使用它不会阻塞而不是进行阻塞同步&#xff0c;因此避免了线程的挂起和重新调度。 AtomicInteger基于“比较和交换”机制&#xff0c;并且是原子变量的标量组的一部分。 我们的第一个用例是可以多次访问的网页上的功能。 pa…

VsCode打开终端的方法

方法1&#xff1a;打开终端的常规方法 打开VScode后&#xff0c;鼠标左键单击窗口顶部的【查看】&#xff08;如下图红圈标注&#xff09;&#xff0c; 在下拉列表中找到【终端】&#xff08;如下图红框标注&#xff09; 鼠标左键点击【终端】即可打开终端子窗口&#xff0c;如…

Ubuntu下VScode配置ssh免密远程登录

一 实现步骤 1.在本机与远程服务器上&#xff0c; 输入ssh-keygen -t rsa&#xff0c;然后连续回车直到结束 2.在本机上执行命令 ssh-copy-id 命令 &#xff08;1&#xff09;.命令介绍 ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下。 达到的功能&am…

VSCode隐藏左边活动栏

用sublime时间较长&#xff0c;VsCode左边的活动栏看上去有些多余。查询隐藏活动栏的快捷键&#xff0c;但没有找到。通过vscode怎么隐藏左边栏&#xff1f; - 知乎有快捷键可以隐藏左边栏么&#xff1f;https://www.zhihu.com/question/48285162 问题&#xff0c;找到相关处理…