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内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈...
内存溢出(Out of Memory,简称OOM)是计算机科学中的一种常见问题,特别是在资源有限的移动设备如Android手机上,处理不当可能导致应用崩溃。本文将深入浅谈如何防止Android应用程序中的内存溢出。 首先,我们需要...
Java内存溢出是Java开发中经常遇到的问题,尤其是当程序运行在有限的物理内存和JVM设置的内存限制之间时。在本篇文档中,将详细介绍java.lang.OutOfMemoryError的8种典型案例,并讨论它们的成因和解决方法。这些案例...
本篇文章主要探讨的是如何解决Tomcat内存溢出问题,这个问题在实际开发中十分常见,对系统的稳定运行至关重要。 首先,内存溢出(Out Of Memory,OOM)通常是由于程序在运行过程中申请的内存超过了系统所能提供的...
overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 ...
2. **内存管理**:监测和优化内存使用,如使用弱引用、软引用避免内存溢出。 3. **进程管理**:根据需求启动、关闭或调整进程优先级。 4. **Activity管理**:维护Activity的生命周期,处理任务回退栈,比如使用`FLAG...
- JVM参数设置:通过在启动Java应用时添加`-XX:+HeapDumpOnOutOfMemoryError`参数,当出现内存溢出时,JVM会自动生成包括Thread Dump在内的Heap Dump文件。 2. **理解Thread状态** - **NEW**:新创建但尚未启动的...
Java是世界上最流行的编程语言之一,尤其在企业级...理解这些Java核心知识点是成为一名高效Java开发者的基础,通过熟练掌握JVM的工作原理,可以更好地优化代码性能,避免内存溢出等问题,从而提升应用程序的整体质量。
当进程由于各种原因如内存溢出、非法指令、硬件故障或系统错误而崩溃时,服务可能会中断,导致用户受到影响。为确保服务的连续性和稳定性,系统需要有机制能够检测到进程的异常终止,并在可能的情况下立即重新启动该...
接着,开发者检查了Java垃圾回收(GC)的情况,通过监控GC日志和使用`jmap`分析JVM内存状态,发现GC工作正常,老年代内存充足,JVM内存分配也符合预期,没有明显的内存溢出问题。即使如此,`ps`命令显示的进程占用的...
堆:是由 new 分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便,另外,在 WINDOWS 下,最好的方式是用 VirtualAlloc 分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,...
mount命令用于挂载文件系统,kill命令可以结束进程。编辑环境变量可以通过编辑.bash_profile或.bashrc文件,如添加PATH变量。 【内存与存储】 计算机内存分为内存(RAM)和外存(硬盘、SSD等)。内存速度快但容量...
了解这些内存区域的工作原理有助于优化Java程序性能,避免内存溢出和垃圾回收问题。例如,合理设计对象的生命周期和大小,可以减少垃圾收集的压力;理解栈和堆的分配规则,可以更好地控制程序运行时的内存占用。 ...
语法检查和堆栈溢出检查是在编译阶段进行的,跨平台是Java的特性,但不是垃圾回收机制的一部分,选项A、B、C错误。 4. Java的安全性体现在访问权限控制上,确保代码只能访问被授权的资源,选项C正确。动态链接和...
理解这些原理对于优化程序性能和避免内存溢出至关重要。 在实验中,你可能会创建一个图形用户界面(GUI),以便直观地展示进程的状态变化(如就绪、运行、等待和结束)以及内存的分配情况。这可以通过设计数据结构...
4. 使用JVM参数:可以使用JVM参数来控制JVM的退出行为,例如,使用-XX:+ExitOnOOM参数可以在JVM内存溢出时退出。 JMeter配置 在使用JMeter执行Java请求时,可以在JMeter配置文件中添加以下参数来解决JVM无法退出的...
并且,如果地址在硬盘上而不是在 RAM 中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问...