- 浏览: 20573 次
最新评论
OOM这个缩写就是Java程序开发过程中让人最头痛的问题:Out of Memory。在很多开发人员的开发过程中,或多或少的都会遇到这类问题,这类问题定位比较困难,往往需要根据经验来判断可能出现问题的代码。原因主要是两个:对象没有被释放(多种情况引起,往往是比较隐蔽的引用导致被Hold而无法被回收)。另一种就是真的Memory不够用了,需要增加JVM的Heap来满足应用程序的需求。最近有同事发的关于解决OOM的问题,让我了解了原来OOM除了在JVM Heap不够时会发生,在Native Heap不够的时候也会发生,同时JVM Heap和Native Heap存在着相互影响和平衡的关系,因此就仔细的去看了关于OOM和JVM配置优化的内容。
java
-Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
-Xmx3800m -Xms3800m
配置了最大Java Heap来充分利用系统内存。-Xmn2g
创建足够大的青年代(可以并行被回收)充分利用系统内存,防止将短期对象复制到老年代。
-Xss128
减少默认最大的线程栈大小,提供更多的处理虚拟内存地址空间被进程使用。
-XX:+UseParallelGC
采用并行垃圾收集器对年青代的内存进行收集,提高效率。
-XX:ParallelGCThreads=20
减少垃圾收集线程,默认是和服务器可支持的线程最大并发数相同,往往不需要配置到最大值。
2
.尝试采用对老年代并行收集
java
-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
-Xmx3550m -Xms3550m
内存分配被减小,因为ParallelOldGC会增加对于Native Heap的需求,因此需要减小Java Heap来满足需求。
-XX:+UseParallelOldGC
采用对于老年代并发收集的策略,可以提高收集效率。
3
.提高吞吐量,减少应用停顿时间
java
-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
选择了并发标记交换收集器,它可以并发执行收集操作,降低应用停止时间,同时它也是并行处理模式,可以有效地利用多处理器的系统的多进程处理。
-XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=31
表示在青年代中Eden和Survivor比例,设置增加了Survivor的大小,越大的survivor空间可以允许短期对象尽量在年青代消亡。
-XX:TargetSurvivorRatio=90
允许90%的空间被占用,超过默认的50%,提高对于survivor的使用率。
类似的例子网上很多,这儿就不在列下来了,最终是否采取自己配置来替换默认配置还是要根据虚拟机的使用情况来分析和配置。
发表评论
-
何时需要将log4j.properties文件替换为xml
2011-08-22 17:35 1747你还在用log4j.properties文件吗? 因为历史遗 ... -
Jmeter结果分析
2011-08-21 01:57 1684Jmeter测试报表相关参 ... -
log4j最佳配置备份
2011-08-19 10:39 859<?xml version="1.0&quo ... -
【转】HttpServletRequest接口的getSession方法
2011-06-14 11:52 1592关于HttpServletRequest接口的getSes ... -
【转】使用JRockit作为工具检测并解决JAVA内存泄漏问题的一次实战
2011-06-13 11:16 17361. JRockit简介Jrockit是Bea开发的符 ... -
【转】使用EJB3的事务管理功能
2011-06-12 11:14 1579我们一般编程都会使用到两种模型实现事务管理:1. ...
相关推荐
### JVM优化与OOM分析 #### 一、JVM的重要性与作用 JVM(Java Virtual Machine)作为Java程序的运行环境,对于确保Java程序能够跨平台运行具有重要意义。它不仅提供了执行字节码的基础,还负责内存管理、垃圾回收...
在JVM优化中,内存配置是关键的一环。例如,`-Xms2048m -Xmx2048m`设置了JVM的最小和最大堆内存为2GB,`-Xmn512m`指定了新生代的大小为512MB,`-XX:MaxPermSize=256m`设定了永久代的最大值为256MB,而`-Xss128k`则...
通过以上介绍可以看出,JVM与Spark之间存在着紧密的联系,通过对JVM的深入理解和优化,可以极大地提升Spark应用的性能。希望本文能为你提供有价值的参考和指导,帮助你在实际工作中更好地应对大数据挑战。
`JVMTest-master`可能包含这样的示例程序,通过控制JVM参数(如`-Xms`、`-Xmx`、`-XX:NewRatio`、`-XX:MaxMetaspaceSize`等)来模拟不同内存配置,观察何时会出现`OOM`。 JVM调优主要包括以下几个方面: 1. **内存...
Java虚拟机(JVM)是Java程序运行的核心组件,它为开发者提供了跨平台的执行环境。JVM通过解析字节码(Bytecode)来...同时,通过合理的参数配置和优化技巧,可以有效避免和解决内存溢出等问题,确保程序的稳定运行。
JVM参数配置是优化Java应用程序性能的关键环节,通过调整这些参数,我们可以控制JVM的行为,包括内存分配、垃圾收集、类加载等方面。在本文中,我们将深入探讨Java虚拟机的参数配置及其对程序性能的影响。 首先,...
理解并正确配置JVM参数对于优化应用程序性能、内存管理和故障排查至关重要。本文将深入探讨JVM的常用参数设置,以及它们如何影响Java应用程序的运行。 一、JVM内存设置 1. **堆内存**: - `-Xms`:初始堆大小,...
2. 优化运行 JVM 运行环境:包括优化 JVM 的配置、垃圾回收机制、类加载机制等。 3. 解决 JVM 运行过程中出现的各种问题:包括解决 OOM 问题、死锁问题、卡顿问题等。 Linux 命令 在 JVM 调优过程中,需要使用一些...
jca457工具可以帮助开发者检查当前的JVM配置是否合理,提供优化建议,以确保JVM在最佳状态下运行。 这些工具的使用方法通常包括以下步骤: 1. **捕获堆转储(Heap Dump)**:当JVM出现OOM时,或者需要定期检查时,...
8. **JVM内存溢出与异常**:学习如何识别和处理常见的JVM错误,如OOM(Out Of Memory)错误,以及如何通过调整JVM配置避免这些问题。 9. **JDK和JRE**:JDK包含JRE和开发工具,如编译器javac和调试器jdb。JRE则包含...
"JVM垃圾回收、参数、强软弱虚、常见错误OOM、与微服务结合" JVM垃圾回收是Java虚拟机(JVM)中的一种机制,用于自动回收无效对象所占用的内存...要解决该错误,需要调整 JVM 参数、优化代码和使用合适的垃圾收集器。
- **常见OOM分析**:OOM (Out Of Memory) 是常见的内存问题之一,通过分析堆转储文件和GC日志,可以定位问题原因。 - **dump分析工具**:如JProfilere、Eclipse Memory Analyzer等工具可以帮助开发者分析堆转储文件...
6. -XX:+PrintFlagsFinal:查看所有默认和已设置的JVM参数值,便于了解当前配置。 三、调试技巧 1. 使用-XX:+HeapDumpOnOutOfMemoryError参数,当发生OOM时自动生成堆转储文件,以便分析内存泄漏。 2. 异常日志...
JVM参数调优是提升Java应用程序性能的关键环节,尤其是在高并发、大数据量的环境中,合适的JVM配置可以显著改善系统的响应速度和稳定性。 在进行JVM调优时,我们主要关注以下几个核心方面: 1. **内存设置**:JVM...
4. **合理设置JVM参数**:根据应用需求和服务器资源,合理配置JVM内存大小和GC策略。 5. **监控和报警**:建立内存使用监控机制,当达到预设阈值时发送报警,提前发现问题。 通过上述分析,我们可以了解到,理解并...
#### 三、Tomcat默认JVM内存配置 根据文档描述,Tomcat JVM虚拟机默认内存大约为1800M。这个值可能并不适合所有应用场景,特别是对于内存消耗较大的应用来说,可能会导致频繁的GC活动甚至OOM(Out Of Memory)错误...
7. **异常处理与日志**:配置当出现OOM(Out Of Memory)时生成内存dump文件和GC日志,便于后期分析问题原因。 通过上述方法,我们可以构建出一个更适应业务需求的JVM运行模型,优化内存利用率,降低GC频率,提高...
了解每个区域的作用和配置参数是调优的基础。 2. **堆内存调优**:堆内存主要用来存放对象实例,分为新生代(Young Generation)和老年代(Old Generation)。新生代又分为Eden区和两个Survivor区。关注`-Xms`和`-...
在实际应用中,根据应用的特性和运行状况,需要不断调整和优化JVM的参数,以达到最佳的性能表现。例如,对于CPU占用过高的问题,可能需要检查是否存在过多的垃圾回收或线程阻塞;对于内存增长过快,可能需要分析对象...