`

java 内存溢出 结束进程

    博客分类:
  • JVM
 
阅读更多

 

 java  内存溢出后,自动输出异常:java.lang.OutOfMemoryError: GC overhead limit exceeded

 

 但进程不退出,gc线程试图,回收内存,不断的执行:

  1. 内存可回收,java 进程恢复到正常状态

  2. 内存不可回收,GC线程会一直执行,(stop the world 和 cpu 升高)导至外部请求不能及时处理,产生超时。

 

可以通过参数指定在OutOfMemoryError 时退出( JDK 8u92 版本以上):

 

New JVM Options added: ExitOnOutOfMemoryError and CrashOnOutOfMemoryError
Two new JVM flags have been added:

  • ExitOnOutOfMemoryError - When you enable this option, the JVM exits on the first occurrence of an out-of-memory error. It can be used if you prefer restarting an instance of the JVM rather than handling out of memory errors.

  • CrashOnOutOfMemoryError - If this option is enabled, when an out-of-memory error occurs, the JVM crashes and produces text and binary crash files (if core files are enabled).

( 官网地址:http://www.oracle.com/technetwork/java/javase/8u92-relnotes-2949471.html)

 

 

测试1: java 参数 -XX:+HeapDumpOnOutOfMemoryError   -XX:HeapDumpPath=heap.hprof

                             -XX:+ExitOnOutOfMemoryError

          参数说明:+HeapDumpOnOutOfMemoryError 在内存溢出时输出 堆dump文件。

                           XX:HeapDumpPath=heap.hprof   指定堆dump文件名。

                           -XX:+ExitOnOutOfMemoryError  内存溢出时退出。

          内存溢出时:nohup.out 文件输出:

                          java.lang.OutOfMemoryError: GC overhead limit exceeded

                           Dumping heap to heap.hprof ...

                           Heap dump file created [886915563 bytes in 70.259 secs]

                           Terminating due to java.lang.OutOfMemoryError: GC overhead limit exceeded

          检查发现 java 进程退出。

 

测试2: java 参数 -XX:+HeapDumpOnOutOfMemoryError   -XX:HeapDumpPath=heap.hprof

                             -XX:+CrashOnOutOfMemoryError 

          参数说明:+HeapDumpOnOutOfMemoryError 在内存溢出时输出 堆dump文件。

                           XX:HeapDumpPath=heap.hprof   指定堆dump文件名。

                           -XX:+CrashOnOutOfMemoryError 内存溢出时退出,输出hs_err_pid.log(含线程dump信息)

          内存溢出时:nohup.out 文件输出:

                     

java.lang.OutOfMemoryError: Java heap space
Dumping heap to heap.hprof ...
Heap dump file created [905557193 bytes in 71.807 secs]
Aborting due to java.lang.OutOfMemoryError: Java heap space
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (debug.cpp:308), pid=5501, tid=0x00007f0644147700
#  fatal error: OutOfMemory encountered: Java heap space
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode linux-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /app/codeexample/bin/hs_err_pid15012.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

 

          检查发现 java 进程退出。(没有ExitOnOutOfMemoryError   退出的快,约1分钟后退出)

                          

 

分享到:
评论

相关推荐

    Android 内存溢出问题

    内存溢出问题,尤其是在处理大量数据或资源时,可能导致应用程序崩溃或性能下降。本篇文章将深入探讨Android内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈...

    防止内存溢出浅析

    内存溢出(Out of Memory,简称OOM)是计算机科学中的一种常见问题,特别是在资源有限的移动设备如Android手机上,处理不当可能导致应用崩溃。本文将深入浅谈如何防止Android应用程序中的内存溢出。 首先,我们需要...

    OutOfMemoryError_8种典型案例分享.pdf

    Java内存溢出是Java开发中经常遇到的问题,尤其是当程序运行在有限的物理内存和JVM设置的内存限制之间时。在本篇文档中,将详细介绍java.lang.OutOfMemoryError的8种典型案例,并讨论它们的成因和解决方法。这些案例...

    tomcat内存溢出问题解决经历

    本篇文章主要探讨的是如何解决Tomcat内存溢出问题,这个问题在实际开发中十分常见,对系统的稳定运行至关重要。 首先,内存溢出(Out Of Memory,OOM)通常是由于程序在运行过程中申请的内存超过了系统所能提供的...

    Java开发技术大全(500个源代码).

    overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 ...

    java任务管理器基础代码

    2. **内存管理**:监测和优化内存使用,如使用弱引用、软引用避免内存溢出。 3. **进程管理**:根据需求启动、关闭或调整进程优先级。 4. **Activity管理**:维护Activity的生命周期,处理任务回退栈,比如使用`FLAG...

    java故障排查ThreadDump

    - JVM参数设置:通过在启动Java应用时添加`-XX:+HeapDumpOnOutOfMemoryError`参数,当出现内存溢出时,JVM会自动生成包括Thread Dump在内的Heap Dump文件。 2. **理解Thread状态** - **NEW**:新创建但尚未启动的...

    java核心知识点.pdf

    Java是世界上最流行的编程语言之一,尤其在企业级...理解这些Java核心知识点是成为一名高效Java开发者的基础,通过熟练掌握JVM的工作原理,可以更好地优化代码性能,避免内存溢出等问题,从而提升应用程序的整体质量。

    进程崩溃自动重启

    当进程由于各种原因如内存溢出、非法指令、硬件故障或系统错误而崩溃时,服务可能会中断,导致用户受到影响。为确保服务的连续性和稳定性,系统需要有机制能够检测到进程的异常终止,并在可能的情况下立即重新启动该...

    java进程消失了

    接着,开发者检查了Java垃圾回收(GC)的情况,通过监控GC日志和使用`jmap`分析JVM内存状态,发现GC工作正常,老年代内存充足,JVM内存分配也符合预期,没有明显的内存溢出问题。即使如此,`ps`命令显示的进程占用的...

    内存中的堆与栈区别 内存中的堆与栈区别

    堆:是由 new 分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便,另外,在 WINDOWS 下,最好的方式是用 VirtualAlloc 分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,...

    java从入门到精通练习题答案.docx

    mount命令用于挂载文件系统,kill命令可以结束进程。编辑环境变量可以通过编辑.bash_profile或.bashrc文件,如添加PATH变量。 【内存与存储】 计算机内存分为内存(RAM)和外存(硬盘、SSD等)。内存速度快但容量...

    java虚拟机深入学习之内存管理机制

    了解这些内存区域的工作原理有助于优化Java程序性能,避免内存溢出和垃圾回收问题。例如,合理设计对象的生命周期和大小,可以减少垃圾收集的压力;理解栈和堆的分配规则,可以更好地控制程序运行时的内存占用。 ...

    Java复习题与答案.pdf

    语法检查和堆栈溢出检查是在编译阶段进行的,跨平台是Java的特性,但不是垃圾回收机制的一部分,选项A、B、C错误。 4. Java的安全性体现在访问权限控制上,确保代码只能访问被授权的资源,选项C正确。动态链接和...

    操作系统实验 进程调度 存储管理

    理解这些原理对于优化程序性能和避免内存溢出至关重要。 在实验中,你可能会创建一个图形用户界面(GUI),以便直观地展示进程的状态变化(如就绪、运行、等待和结束)以及内存的分配情况。这可以通过设计数据结构...

    执行java请求时导致在脚本执行结束时JVM无法退出

    4. 使用JVM参数:可以使用JVM参数来控制JVM的退出行为,例如,使用-XX:+ExitOnOOM参数可以在JVM内存溢出时退出。 JMeter配置 在使用JMeter执行Java请求时,可以在JMeter配置文件中添加以下参数来解决JVM无法退出的...

    操作系统(内存管理)

    并且,如果地址在硬盘上而不是在 RAM 中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问...

Global site tag (gtag.js) - Google Analytics