- 浏览: 274394 次
- 性别:
- 来自: 湖南岳阳
最新评论
-
ternus:
兄弟,我用boboBrowse 也遇到了排序的问题,上线了讨论 ...
lucene 分组 bobo-Browse 排序的问题 -
luli0822:
Awesome bookmarks of those guru ...
流行的jQuery信息提示插件(jQuery Tooltip Plugin) -
shenbai:
如果你要在前台运行,你应该run得是ElasticSearch ...
ElasticSearch 源码分析 环境入门 -
cl1154781231:
<s:peroperty value="#at ...
关于Struts2中标签的一些心得 -
RonQi:
转载的吗?http://blog.csdn.net/stray ...
利用bobo-browse 实现lucene的分组统计功能
JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境
LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器,新手可能觉
得这文章没有用。
一:串行垃圾回收,也就是默认配置,完成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后对内存进行整理压缩,免得产生内存碎片,CMSFullGCsBeforeCompaction=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
发表评论
-
Errors running builder 'DeploymentBuilder' on project_java
2014-10-09 11:54 737此问题一般发生在Myeclipse 保存文件并自动部署时候 ... -
MyEclipse的SVN插件的问题
2012-02-27 14:06 1712我的项目都统一使用了UTF-8编码 查看当前版本,还是提 ... -
Eclipse的SVN插件历史版本乱码的问题
2012-02-27 14:04 0我的项目都统一使用了UTF-8编码 查看当前版本,还是提 ... -
java中的io系统详解
2011-09-16 12:09 1078相关读书笔记、心得文章列表 Ja ... -
hibernate表关联注解
2011-08-02 11:39 1366好久就想玩一下hibernate注解了(因为不用hbm文件,维 ... -
TCP/IP传输层,你懂多少?
2011-05-12 17:13 1655你所不知道的传输层 题记:23页的文档上,满满当当的 ... -
关于Struts2中标签的一些心得
2011-05-06 17:21 1689最近在做Struts2+Hibernet的一个项目,在if标签 ... -
This wizard is not available because it requires a valid professional subscripti
2011-04-18 23:05 1827今天用myeclipse学习UML时,打开UML时出现了: ... -
Tomcat内存、连接数等性能参数设置
2011-04-08 09:59 1194默认参数不适合生产环 ... -
Eclipse 或 MyEclipse 不能自动编译 class文件(综合)
2011-03-25 11:50 4681有时候用Eclipse或者MyEclipse 的时候,发现不 ... -
AccessController.doPrivileged 小记
2011-03-24 11:43 1026AccessController.doPrivileged ... -
servlet 读取图片
2011-02-17 15:38 1104String path = "F:/wjbo ... -
获取文件长度http,ftp
2011-01-18 16:09 1688ftp: FTPClient ftp = new FTPCl ... -
类的设计原则
2010-12-13 18:14 1021开闭原则 Software entities ... -
收集的网站
2010-12-09 17:12 849NIO.2 入门,第 1 部分: 异步通道 API http ... -
看Hibernate源码 003 - ID Generator
2010-12-09 16:43 1305Hibernate的id生成有N种策略, 可以通过hbm文件或 ... -
看Hibernate源码 001
2010-12-09 10:40 1057我看书的方式一向是&quo ... -
Hibernate Memcached 配置
2010-12-08 15:39 2113官方网址: http://code.google.com/p/ ... -
tomcat如何配置虚拟目录及虚拟主机
2010-12-02 17:54 2148先说说如何用Eclipse来做servlet开发,那些proj ... -
jaas:授权内幕
2010-11-13 15:48 1314Java 授权内幕: 以代码 ...
相关推荐
重要性:垃圾回收是Java垃圾回收器的核心功能,对性能和内存管理至关重要。准确理解垃圾回收的原理和机制,以及能够优化和调优垃圾回收过程的能力,是一个Java开发者必备的基本技能。 面试中可能会问到的垃圾回收...
内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、...
为什么J2EE应用程序性能慢? 了解系统限制和设定调优目标 建立性能调优策略 决定调优时机 Java虚拟机内核分析 Java内存泄漏分析 J2EE性能分析 如何优化循环、多分支和递归 ...Java垃圾回收机制分析
1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾回收面临的问题 1.5 JVM调优总结(五)-分代垃圾回收详述1 1.6 JVM调优总结(六)-分代垃圾回收详述2 1.7 JVM调优总结(七)-典型配置举例1 1.8 ...
JVM垃圾回收,为大家整理了JVM原理以及各种调优策略
该文档由JAVA官方文档翻译而来,介绍了什么是垃圾收集器、JVM 主要的垃圾收集器、怎么去调优JVM的垃圾收集器性能及问题排查
大厂架构师-日均百万订单量的JVM优化与高级GC调优策略实战(5.8G) 〖课程介绍〗: 来自顶尖大厂的架构师级JVM优化...├─第6篇-垃圾回收篇.png?x-oss-process=style/pnp8 ├─第7篇-JVM性能监控篇.png?x-oss-process=styl
• 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、NIO、AIO),熟悉JVM类加载过程与...
比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。
比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。
前言 第1章 性能调优策略概述 ...7.3 垃圾回收机制相关 7.4 实用JVM实验 7.5 本章小结 第8章 其他优化建议 8.1 Java现有机制及未来发展 8.2 系统架构优化建议 8.3 与编程无关 8.4 本章小结
JVM体系结构与GC调优,内容涉及JVM的垃圾回收的各种策略和JVM的各种内存的结构的分配
1、Java内存区域 2、垃圾回收器和内存分配策略 3、JVM的执行子系统 4、编写高效优雅Java程序 5、深入了解性能优化
1.JVM的gc概述 gc即垃圾收集机制是指...在设置了上述参数后可以通过Visualgc 来观察垃圾回收的一些参数状态,再做相应的调整来改善性能。一般的标准是减少fullgc的次数,最好硬件支持使用并行垃圾回收(要求多CPU)。
/ 57 3.4.3 Parallel Scavenge收集器 / 59 3.4.4 Serial Old收集器 / 60 3.4.5 Parallel Old收集器 / 61 3.4.6 CMS收集器 / 61 3.4.7 G1收集器 / 64 3.4.8 垃圾收集器参数总结 / 64 3.5 内存分配与回收策略 /...
JVM,JVM内存结构、HotSpot 虚拟机对象探秘、垃圾收集策略与算法、HotSpot 垃圾收集器、内存分配与回收策略、JVM 性能调优、类文件结构。。
3.6 内存分配与回收策略 3.6.1 对象优先在Eden分配 3.6.2 大对象直接进入老年代 3.6.3 长期存活的对象将进入老年代 3.6.4 动态对象年龄判定 3.6.5 空间分配担保 3.7 本章小结 第4章 虚拟机性能监控与故障...
包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码 第1讲 说在前面的话 免费 00:05:07 第2讲 整个部分要讲的内容说明 免费 00:06:58 第3讲...
GC垃圾回收 JVM性能监控与故障定位 JVM调优 二、数据结构和算法 数据结构 字符串 数组 链表 二叉树 堆、栈、队列 哈希 算法 查找 排序 贪心 分治 动态规划 回溯 三、计算机网络 ARP协议 IP/ICMP协议 TCP/UDP协议 DNS...