- 浏览: 157361 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lovelimx:
最后一个java文件第37行 orignal = new S ...
JAVA笔试面试必考题系列(六)——字符串(String)杂谈 -
ponlya:
下午又去下了个eclipse3.4,再按这方法,ok了。谢谢楼 ...
eclipse 3.4 下配置 Hibernate tool工具 -
ponlya:
如楼主所说的第1,2步,我在第3步中怎么得不到那个文件夹?换用 ...
eclipse 3.4 下配置 Hibernate tool工具 -
chinaboby2008:
...
JBoss目录结构说明 -
chinaboby2008:
这是java中的j2se部分。是java的基础呢。
有关Java容器的基础知识
JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器,网站是http://shedewang.com
一:串行垃圾回收,也就是默认配置,完成10万request用时153秒,JVM参数配置如下
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps ";
这种配置一般在resin启动24小时内似乎没有大问题,网站可以正常访问,但查看日志发现,在接近24小时时,Full GC执行越来越频繁,大约每隔3分钟就有一次Full GC,每次Full GC系统会停顿6秒左右,作为一个网站来说,用户等待6秒恐怕太长了,所以这种方式有待改善。MaxTenuringThreshold=7表示一个对象 如果在救助空间移动7次还没有被回收就放入年老代,GCTimeRatio=19表示java可以用5%的时间来做垃圾回收,1/(1+19)=1 /20=5%。
二:并行回收,完成10万request用时117秒,配置如下:
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xmx2048M -Xms2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=500 -XX:+UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 ";
并行回收我尝试过多种组合配置,似乎都没什么用,resin启动3小时左右就会停顿,时间超过10 秒。也有可能是参数设置不够好的原因,MaxGCPauseMillis表示GC最大停顿时间,在resin刚启动还没有执行Full GC时系统是正常的,但一旦执行Full GC,MaxGCPauseMillis根本没有用,停顿时间可能超过20秒,之后会发生什么我也不再关心了,赶紧重启resin,尝试其他回收策略。
三:并发回收,完成10万request用时60秒,比并行回收差不多快一倍,是默认回收策略性能的2.5倍,配置如下:
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 ";
这个配置虽然不会出现10秒连不上的情况,但系统重启3个小时左右,每隔几分钟就会有5秒连不上的情况,查看gc.log,发现在执行ParNewGC时 有个promotion failed错误,从而转向执行Full GC,造成系统停顿,而且会很频繁,每隔几分钟就有一次,所以还得改善。UseCMSCompactAtFullCollection是表是执行Full GC后对内存进行 硌顾酰 獾貌 诖嫠槠 珻MSFullGCsBeforeCompaction=N表示执行N次Full GC后执行内存压缩。
四:增量回收,完成10万request用时171秒,太慢了,配置如下
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xincgc ";
似乎回收得也不太干净,而且也对性能有较大影响,不值得试。
五:并发回收的I-CMS模式,和增量回收差不多,完成10万request用时170秒。
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10 -XX:-TraceClassUnloading ";
采用了sun推荐的参数,回收效果不好,照样有停顿,数小时之内就会频繁出现停顿,什么sun推荐的参数,照样不好使。
六:递增式低暂停收集器,还叫什么火车式回收,不知道属于哪个系,完成10万request用时153秒
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseTrainGC ";
该配置效果也不好,影响性能,所以没试。
七:相比之下,还是并发回收比较好,性能比较高,只要能解决ParNewGC(并行回收年轻代)时的promotion failed错误就一切好办了,查了很多文章,发现引起promotion failed错误的原因是CMS来不及回收(CMS默认在年老代占到90%左右才会执行),年老代又没有足够的空间供GC把一些活的对象从年轻代移到年老 代,所以执行Full GC。CMSInitiatingOccupancyFraction=70表示年老代占到约70%时就开始执行CMS,这样就不会出现Full GC了。SoftRefLRUPolicyMSPerMB这个参数也是我认为比较有用的,官方解释是softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap,我觉得没必要等1秒,所以设置成0。配置如下
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Xloggc:log/gc.log ";
上面这个配置内存上升的很慢,24小时之内几乎没有停顿现象,最长的只停滞了0.8s,ParNew GC每30秒左右才执行一次,每次回收约0.2秒,看来问题应该暂时解决了。
参数不明白的可以上网查,本人认为比较重要的几个参数是:-Xms -Xmx -Xmn MaxTenuringThreshold GCTimeRatio UseConcMarkSweepGC CMSInitiatingOccupancyFraction SoftRefLRUPolicyMSPerMB
发表评论
-
OSI七层模型与 TCP/IP五层模型 TCP/UDP的区别
2010-12-27 18:53 5400OSI七层模型与 TCP/IP五层 ... -
http get post的区别
2010-03-12 11:40 1864定义了与服务器交互的不同方法,最基本的方法是 GET 和 PO ... -
动态增加行 js代码
2010-03-11 16:50 1282<!DOCTYPE HTML PUBLI ... -
全面总结Java泛型
2010-02-23 17:51 899虽然Scala创始人Martin Odersky说当年正是因为 ... -
Java运行时多态性:继承和接口的实现
2010-02-23 17:48 1296Java是面向对象的语言,而运行时多态性是面向对象程序设计代码 ... -
各种集合对比
2010-02-22 17:41 898Collections和Collection的区别 Col ... -
WEB应用中的servlet的 service,doPost,doGet方法的关系
2010-02-22 17:33 1951WEB应用中的servlet的 service,doPost, ... -
Hibernate 缓存机制(二)
2010-02-07 21:47 1064为什么使用hibernate 1、对JDBC操作提供封装, ... -
Hibernate 缓存机制
2010-02-07 21:23 731缓存是介于应用程序和 ... -
eclipse 3.4 下配置 Hibernate tool工具
2009-09-14 17:08 2146http://www.51taobaogood.cn 1. ... -
Valang Validator学习实例入门
2009-09-14 15:48 1386Valang Validator 是较为新颖的插件,在参考胡键 ... -
JavaBean之间拷贝利器-Dozer
2009-09-14 15:42 1886JavaBean之间拷贝利器-Doze ... -
Download and crack Jprobe 8.0
2009-06-15 14:27 3344(转)Download and crack Jprobe 8 ... -
spring获得ApplicationContext
2009-06-08 17:06 20901.servlet Spring获取ApplicationC ... -
操作properties文件总结
2009-06-08 17:00 9931.spring读取 ////////////////// ... -
软件版本GA,RC,Demo,Build意思
2009-05-25 10:48 851转自 http://blog.chinaunix.ne ... -
选择Java接口还是抽象类
2009-05-11 16:43 940很多人有过这样的疑问 ... -
有关Java容器的基础知识
2009-05-08 15:04 1195Java中容器是Java3中比较 ... -
Java性能优化小技巧
2009-05-08 10:35 9361.1.在创建对象时能不用new关健字的最好不要用new创建新 ... -
java中八种IO操作
2009-05-08 10:01 872package com.mengya.TestIO; i ...
相关推荐
JVM调优是J2EE性能调优的核心之一,涉及到JVM的选择、堆内存大小、垃圾回收策略等多个方面: 1. **JVM版本选择**:选择合适的JVM版本至关重要,应优先考虑用户认证过的版本。 2. **JVM堆内存大小**:合理设置初始堆...
在J2EE应用中,性能调优通常涉及到程序、数据库、应用服务器、JVM(Java虚拟机)和操作系统的多个层面,由于其复杂性,调试和优化工作往往需要大量资源和专业知识。因此,通过最小化资源压力测试,可以简化测试环境...
2.1 JVM调优涉及到内存管理和垃圾收集,如调整堆大小和使用特定JVM如jRockit进行优化。2.2 Server调优关注于本地I/O、线程管理、连接参数及执行队列设置,以提高服务器处理能力。2.3至2.6进一步针对JDBC、Web、JMS和...
总结,J2EE应用性能调优是一个综合性的工程,涉及到硬件、网络、操作系统、J2EE容器、后台服务、前端以及JVM等多个层面的优化。每个层面的优化都有其独特的方法和策略,需要结合实际情况灵活运用,以实现整体性能的...
JVM调优包括调整垃圾收集器设置和堆大小,对于jRockit,可能需要进一步的专用调优。服务器层面的优化涉及本地I/O库的使用,调整默认执行线程数,以及连接参数。创建新的执行队列可以平衡负载。 JDBC调优关注连接池...
在J2EE(Java 2 Platform, Enterprise Edition)应用程序开发中,性能优化是至关重要的一个环节,它关乎到系统的响应速度、并发处理能力和资源利用效率。J2EE平台提供了多种服务,如Web容器、EJB容器、JMS、JPA等,...
6. **JVM调优**: 调优JVM涉及调整堆大小、设置垃圾收集器、优化新生代与老年代比例、监控内存使用情况等。通过JDK提供的工具如`jconsole`、`jvisualvm`、`jmap`、`jstat`等可以收集性能数据,并基于这些数据调整...
OC4J优化涉及JVM参数调整、线程池设置和日志级别控制,以提高Java应用程序的响应速度。并发管理器的优化旨在平衡系统负载,减少等待时间和提高并发用户的处理能力。Forms Server的监控和优化则确保了Web表单的快速...
JVM调优主要包括以下几个方面: 1. 内存调优:调整堆大小、新生代和老年代的比例、Eden和Survivor空间大小,以及垃圾回收策略,以优化内存使用和避免性能瓶颈。 2. 类加载和卸载:优化类加载机制,避免类的频繁...
性能优化是任何系统开发中的关键环节,尤其对于处理大量并发请求的企业级应用而言,J2EE性能优化显得尤为重要。以下是对J2EE性能优化的详尽探讨: 一、JVM(Java虚拟机)优化 1. **JVM内存配置**:理解不同JVM内存...
1. **JVM参数调优**: - **内存配置**:调整初始堆大小(`-Xms`)和最大堆大小(`-Xmx`),以适应应用的内存需求,防止频繁的垃圾收集。 - **垃圾收集器选择**:根据应用特性选择合适的垃圾收集器,例如,CMS、G1...
总的来说,开发高效率的J2EE企业应用需要对JVM内存管理、数据库资源利用、网络通信和事务处理有深入理解,并充分利用各种工具进行性能监控和调优。通过不断学习和实践,开发者可以提高应用性能,确保大型项目的稳定...
**2.1 JVM调优** - **垃圾收集**: 调整垃圾收集策略和堆大小,提高垃圾回收的效率。 - **jRockit调优**: 利用jRockit特有的调优工具和技术,如内存泄漏检测等。 **2.2 Server调优** - **本地I/O库**: 使用本地I/O...
`WebLogic平台下J2EE调优攻略.doc`则可能深入讨论了如何针对J2EE应用程序进行性能优化,包括调整线程池、内存分配、垃圾收集策略等关键环节。 `WebLogic服务器性能参数.doc`文档可能会列出并解释WebLogic服务器的...