JVM参数的设置(特别是 –Xmx –Xms –Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold等参数的设置没有一个固定的公式,需要根据PV old区实际数据 YGC次数等多方面来衡量。为了避免promotion faild可能会导致xmn设置偏小,也意味着YGC的次数会增多,处理并发访问的能力下降等问题。每个参数的调整都需要经过详细的性能测试,才能找到特定应用的最佳配置。
promotion failed:
垃圾回收时promotion failed是个很头痛的问题,一般可能是两种原因产生,第一个原因是救助空间不够,救助空间里的对象还不应该被移动到年老代,但年轻代又有很多对象需要放入救助空间;第二个原因是年老代没有足够的空间接纳来自年轻代的对象;这两种情况都会转向Full GC,网站停顿时间较长。
解决方方案一:
第一个原因我的最终解决办法是去掉救助空间,设置-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0即可,第二个原因我的解决办法是设置CMSInitiatingOccupancyFraction为某个值(假设70),这样年老代空间到70%时就开始执行CMS,年老代有足够的空间接纳来自年轻代的对象。
解决方案一的改进方案:
又有改进了,上面方法不太好,因为没有用到救助空间,所以年老代容易满,CMS执行会比较频繁。我改善了一下,还是用救助空间,但是把救助空间加大,这样也不会有promotion failed。具体操作上,32位Linux和64位Linux好像不一样,64位系统似乎只要配置MaxTenuringThreshold参数,CMS还是有暂停。为了解决暂停问题和promotion failed问题,最后我设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold去掉,这样即没有暂停又不会有promotoin failed,而且更重要的是,年老代和永久代上升非常慢(因为好多对象到不了年老代就被回收了),所以CMS执行频率非常低,好几个小时才执行一次,这样,服务器都不用重启了。
CMSInitiatingOccupancyFraction值与Xmn的关系公式
上面介绍了promontion faild产生的原因是EDEN空间不足的情况下将EDEN与From survivor中的存活对象存入To survivor区时,To survivor区的空间不足,再次晋升到old gen区,而old gen区内存也不够的情况下产生了promontion faild从而导致full gc.那可以推断出:eden+from survivor < old gen区剩余内存时,不会出现promontion faild的情况,即:
(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100)>=(Xmn-Xmn/(SurvivorRatior+2)) 进而推断出:
CMSInitiatingOccupancyFraction <=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
例如:
当xmx=128 xmn=36 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((128.0-36)-(36-36/(1+2)))/(128-36)*100 =73.913
当xmx=128 xmn=24 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((128.0-24)-(24-24/(1+2)))/(128-24)*100=84.615…
当xmx=3000 xmn=600 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((3000.0-600)-(600-600/(1+2)))/(3000-600)*100=83.33
CMSInitiatingOccupancyFraction低于70% 需要调整xmn或SurvivorRatior值。
- 大小: 19.6 KB
分享到:
相关推荐
JVM提供了一个运行时环境,使得Java程序能够在任何支持JVM的操作系统上运行而无需修改源代码,实现了“一次编写,到处运行”的理念。 #### 二、JVM架构概述 1. **类加载器(Class Loader)**:负责将.class文件中...
6. **JVM调优**:包括堆大小设置、GC参数调整、类加载优化等,通过监控和调整JVM参数,可以改善应用程序的性能。 7. **JDK工具**:如JVisualVM、jconsole、jmap、jhat等,这些工具可以帮助开发者监控JVM状态,进行...
### Java JDK 环境参数设置详析 Java作为全球广泛使用的编程语言之一,其运行环境的正确配置至关重要。...通过本文的详细介绍,希望每位读者都能掌握JDK环境参数设置的核心要点,为自己的Java开发之旅奠定坚实的基础。
在实际开发中,对JVM进行性能优化是一项至关重要的任务。以下是一些关于JVM性能优化的关键知识点: 1. **内存管理:** - **堆内存**:Java对象主要存储在堆内存中,分为新生代(Young Generation)和老年代(Old ...
JVM调优是一项复杂但至关重要的任务,涉及到内存管理、垃圾收集、类加载以及线程调度等多个方面。以下是对"JVM调优总结"的详细解读。 1. **内存配置**:JVM内存分为堆内存(Heap)、方法区(Method Area)、栈内存...
- **JVM参数设置**:如-Xms、-Xmx控制堆内存大小,-XX:NewRatio调整新生代和老年代比例,-XX:SurvivorRatio设定Survivor空间大小等。 - **GC日志分析**:通过分析GC日志,找出内存分配、回收的模式,优化垃圾收集...
- JVM调优主要包括调整JVM参数以优化内存管理、垃圾回收等。常见的调优策略包括调整堆大小、选择合适的垃圾回收器等。 #### 八、编译预编译与SQL注入 - SQL预编译可以提高安全性并防止SQL注入攻击。通过使用预编译...
总结,WebLogic的日常维护和故障诊断是一个综合性的任务,需要结合系统监控、日志分析、配置管理等多个方面。通过规范化的运维流程和细致的问题排查,能够有效地确保WebLogic服务器的稳定运行,从而保证企业的业务...
在现代企业级应用环境中,IBM WebSphere Application Server (WAS) 是一个被广泛采用的应用服务器平台。为了确保应用能够高效运行并满足业务需求,对WAS进行适当的性能调优是至关重要的。本文将详细介绍如何针对WAS ...
这通常涉及到配置JVM参数以支持远程调试,以及在Eclipse中正确设置远程调试连接。 #### 知识点二:Java Debug 和 JSR-45 基本原理 在深入了解Eclipse插件的开发之前,我们需要先理解两个重要的基础概念:Java ...
- **起源**: Java 最初源自 Sun 公司的一个名为 Green 的项目,该项目旨在为家用消费电子产品开发一个分布式代码系统。最初考虑使用 C++,但由于 C++ 复杂性和安全性问题,最终基于 C++ 开发了一种新语言 Oak,后...
#### 三、编写第一个 Java 程序 **示例代码** ```java public class Test { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` - **public**:表示该类可以被其他包中的...
在IT行业中,Apache Tomcat是一个广泛应用的开源Web服务器和Java Servlet容器,它实现了Java EE的Web部分,包括Servlet、JSP和WebSocket等规范。Tomcat的安装与配置是Java Web开发者必须掌握的基础技能之一。 一、...
- `<jsp:plugin>`:用于在客户端浏览器中执行一个Bean或显示一个Applet。 - `<jsp:param>`:为被包含的页面或其他资源提供参数。 - `<jsp:useBean>`:实例化一个JavaBean对象。 - `<jsp:getProperty>`:获取JavaBean...
- **JVM参数调优**: 如-Xms、-Xmx、-XX:NewRatio等,理解和设置合理的JVM内存配置。 - **性能监控**: 使用JVisualVM、jconsole等工具进行性能分析。 - **类加载机制**: 启动类加载器、扩展类加载器和应用程序类...
4. **方法重载(Overloading)**:方法重载是指在同一个类中定义多个同名方法,但它们的参数列表不同(参数数量、类型或顺序不同)。Java根据传入的参数自动选择合适的方法进行调用,这是编译时多态的一种表现。 5....
- **public class定义**:每个源文件最多有一个公共类,文件名与类名相同。 - **class定义**:可以有多个非公共类定义。 - **interface定义**:可以有多个接口定义。 6. **Java语言基础**: - **关键字**:如`...
这些区域的大小也可以通过JVM参数进行调整。 8. **内存溢出错误**: 如果堆内存不足,JVM会尝试通过垃圾回收释放空间。但如果无法找到足够的连续内存分配新对象,JVM将抛出`java.lang.OutOfMemoryError: Java heap...
2. **JSP转Servlet**:Web服务器上的JSP容器接收到请求后,会将JSP页面转化为一个等效的Servlet源代码。 3. **编译**:生成的Servlet源代码会被编译成.class文件。 4. **加载与执行**:编译后的.class文件被加载到...
总结来说,搭建Eclipse开发环境涉及多个步骤,包括服务器配置、JVM参数调整、编译器设置、数据库连接、错误排查等。理解并掌握这些要点对于提高开发效率和解决可能出现的问题至关重要。通过细心的配置和适时的调整,...