IBM JVM调整– gencon GC策略

本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项。 该调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。

IBM JVM概述

正如您可能从其他文章中看到的那样,IBM JVM在某些方面与HotSpot JVM不同,因为它没有PermGen内存空间。 从垃圾回收的角度来看,它确实为您提供了可以利用多物理核心计算机的高级算法; 与HotSpot JVM类似。

从故障诊断的角度来看,IBM为您提供了许多工具。 包括从其JVM实现中获得的开箱即用的Thread Dump和Heap Dump生成功能。

例如,IBM JVM线程转储特别强大,因为它为您提供了有关JVM的额外数据,例如活动的JVM环境变量,GC策略,每个活动的类加载器中的已加载类等。我们将在本部分中对此进行更详细的探讨。我们的线程转储培训计划的4 。

IBM VM –默认GC行为

现在回到我们的主要主题,了解IBM JVM垃圾收集器(版本1.5和1.6)的默认行为非常重要。 默认情况下,使用终身记忆例如,它不会创建一个单独的YoungGen(幼儿园)空间中创建了Java堆空间。 这意味着任何内存分配都将进入租用空间(短期和长期对象),该空间随后由默认收集器(通过Full GC)收集。

在下面找到详细的GC快照,其中显示了默认的GC内存故障,并带有解释:

<af type="tenured" id="5" timestamp="Mar 01 13:40:30 2012" intervalms="0.000"><minimum requested_bytes="48" /><time exclusiveaccessms="0.106" meanexclusiveaccessms="0.106" threads="0" lastthreadtid="0x000000011A846B00" /><tenured freebytes="20131840" totalbytes="2013265920" percent="0" ><soa freebytes="0" totalbytes="1993134080" percent="0" /><loa freebytes="20131840" totalbytes="20131840" percent="100" /></tenured><gc type="global" id="8" totalid="2492" intervalms="2017588.587"><finalization objectsqueued="199" /><timesms mark="808.286" sweep="9.341" compact="0.000" total="818.292" /><tenured freebytes="1362331024" totalbytes="2013265920" percent="67" ><soa freebytes="1344212368" totalbytes="1995147264" percent="67" /><loa freebytes="18118656" totalbytes="18118656" percent="100" /></tenured></gc><tenured freebytes="1362330976" totalbytes="2013265920" percent="67" ><soa freebytes="1344212320" totalbytes="1995147264" percent="67" /><loa freebytes="18118656" totalbytes="18118656" percent="100" /></tenured><time totalms="818.750" /></af>

好的,默认的IBM JVM GC策略是不同的……问题是什么?

此默认JVM策略的问题在于,所有Java对象都被复制到租用空间并通过全局集合(完整GC)进行收集。 对于许多Java EE应用程序,短期对象与长期对象的比率要高得多。 这意味着您的JVM将需要执行很多主要的收集工作,以清理短期对象。 结果:Full GC的频率增加,JVM暂停时间增加,CPU利用率增加和性能下降!

这正是我们在使用默认GC策略将JVM HotSpot 1.5(使用增量和并行GC)迁移到IBM JVM 1.6之后执行负载测试时观察到的结果。 根据上述说明,重度GC过程被确定为根本原因。

请解决!

好消息是,IBM JVM 从版本1.5开始引入了世代和并发GC收集器 。 该GC政策正是提供了我们想要的:

  • 它确实将Java Heap空间在苗圃空间和保育空间之间进行了划分
  • 托儿所(YoungGen)空间对象通过清除剂GC收集器单独收集
  • 通过全局GC收集器收集长期空间对象
  • GC收集器是并发的,并且可以利用任何多物理核计算机

结果:

  • 降低主要采集频率(全GC)
  • 减少了全GC消耗的时间和暂停时间
  • 增加JVM吞吐量
  • 提高应用程序的性能和容量

您可以通过在下面添加此JVM参数来启用它:

-Xgcpolicy:gencon

在启用此GC策略后,在下面的详细GC日志中可以找到什么:

<af type="nursery" id="15" timestamp="Mar 08 05:34:06 2012" intervalms="1289096.227"><minimum requested_bytes="40" /><time exclusiveaccessms="0.085" meanexclusiveaccessms="0.085" threads="0" lastthreadtid="0x0000000118113900" /><refs soft="18043" weak="204057" phantom="27" dynamicSoftReferenceThreshold="32" maxSoftReferenceThreshold="32" /><nursery freebytes="0" totalbytes="530716672" percent="0" /><tenured freebytes="1887422016" totalbytes="2013265920" percent="93" ><soa freebytes="1786758720" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><gc type="scavenger" id="15" totalid="15" intervalms="1289097.271"><flipped objectcount="1486449" bytes="129908000" /><tenured objectcount="1176" bytes="184144" /><finalization objectsqueued="3082" /><scavenger tiltratio="73" /><nursery freebytes="364304408" totalbytes="495208448" percent="73" tenureage="10" /><tenured freebytes="1886766656" totalbytes="2013265920" percent="93" ><soa freebytes="1786103360" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><time totalms="233.886" /></gc><nursery freebytes="364238872" totalbytes="495208448" percent="73" /><tenured freebytes="1886766656" totalbytes="2013265920" percent="93" ><soa freebytes="1786103360" totalbytes="1912602624" percent="93" /><loa freebytes="100663296" totalbytes="100663296" percent="100" /></tenured><refs soft="17992" weak="5344" phantom="27" dynamicSoftReferenceThreshold="32" maxSoftReferenceThreshold="32" /><time totalms="236.858" /></af>

请记住,您的应用程序仍可能无法从该GC策略中受益(长寿命对象等会占用更大的空间),因此,我对您的建议是始终进行尽职调查并执行适当的容量规划和负载测试您的应用程序,然后再执行任何主要的调整建议。

结论

我希望本文能帮助您了解默认的IBM JVM 1.5 / 1.6 GC策略以及Java EE应用程序如何从该GC策略gencon调整建议中受益。

参考: IBM JVM调优–来自我们JCG合作伙伴 Pierre-Hugues Charbonneau的gencon GC策略 ,位于Java EE支持模式和Java教程博客。


翻译自: https://www.javacodegeeks.com/2012/04/ibm-jvm-tuning-gencon-gc-policy.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主从配置错误_mysql主从配置失败,主从通讯失败

配置mysql主从的时候&#xff0c;检查slave状态&#xff0c;发现报错信息&#xff0c;Error The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement on query.mysql> show slave status\G*************************** 1. r…

echarts如何显示在页面上

echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src"js/echarts.min.js"></script> 2.新建一个div&#xff0c;style自己定&#xff0c;但必须要有width和height <div id"history_state" style"width: 400px;height: 20…

懒惰的JSF Primefaces数据表分页–第2部分

页面代码非常简单&#xff0c;没有复杂性。 检查“ index.xhtml”代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www…

二分匹配之最大权值匹配算法---KM模板

百科&#xff1a;http://baike.baidu.com/link?urlvbM3H4XmfrsWfP-epdlR2sVKSNzOq4hXnWDqm5uo8fd7VWsF2SmhDV35XyVUDvVjvrtf42RUITJuNCHn-7_x6K 大神总结&#xff1a;http://www.cnblogs.com/skyming/archive/2012/02/18/2356919.html 代码&#xff1a; 1 #include<stdio.h…

java实现报表_用存储过程和 JAVA 写报表数据源有什么弊端?

用存储过程和 JAVA 写报表数据源有什么弊端&#xff1f;跟着小编一起来一看一下吧&#xff01;我们在报表开发中经常会使用存储过程准备数据&#xff0c;存储过程支持分步计算&#xff0c;可以实现非常复杂的计算逻辑&#xff0c;为报表开发带来便利。所以&#xff0c;报表开发…

SpringMVC学习笔记整理

SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记&#xff1a; 导入jar包 一&#xff1a;springmvc工作流程。 ①. servlet容器初始化一个request请求 ②. DispatcherServlet分发器负责发送请求到映射器. ③. despatcherServlet把请求交给处理器映射Mapping&…

Java EE重新审视设计模式:异步

尽管您可能找不到作为设计模式列出的异步方法调用&#xff0c;但我还是值得一提。 因此&#xff0c;这是我的JavaEE Revisits设计模式系列的最后一篇文章。 异步方法调用只不过是多线程。 基本上&#xff0c;它是指将在单独的线程中运行的方法调用&#xff0c;因此主&#xff0…

am335x watchdog

am335x watchdog 内核文档kernel/Documentation/watchdog Qtaplex:~/kernel/7109/linux-3.2.0/Documentation/watchdog$ ll total 88 drwxrwxr-x 3 Qt Qt 4096 Jun 8 15:11 ./ drwxrwxr-x 94 Qt Qt 12288 Apr 28 13:09 ../ -rwxrwxr-x 1 Qt Qt 576 Nov 20 2013 00-INDEX -rwxrw…

springboot2 使用hikaridatasource 并测试_基于Spring Boot 2.x的后端管理网站脚手,源码免费分享...

基于Spring Boot 2.x 的 Material Design 的后端管理网站脚手架 &#xff1a;提供权限认证 用户管理 菜单管理 操作日志 等常用功能去繁就简 重新出发基于Spring Boot 集成一些常用的功能&#xff0c;你只需要基于它做些简单的修改即可。功能列表&#xff1a;权限认证权限管理用…

测试驱动开发–双赢策略

敏捷从业人员谈论测试驱动开发 &#xff08;TDD&#xff09;&#xff0c;所以许多关心代码质量和可操作性的开发人员也是如此。 我曾几何时&#xff0c;不久前设法阅读了有关TDD的文章。 据我了解&#xff0c;TDD的关键是&#xff1a; 编写测试&#xff0c;但失败 代码&#x…

设计模式学习(三)——装饰器模式

前言 距离上一次正儿八经地写随笔已经有一段时间了&#xff0c;虽然2月10号有一篇关于泛型的小记&#xff0c;但是其实只是简单地将自己的学习代码贴上来&#xff0c;为了方便后续使用时查阅&#xff0c;并没有多少文字和理解感悟。之所以在今天觉得有必要写点东西&#xff0c;…

swift - 导航栏设置

话不多&#xff0c;直接贴代码&#xff1a; let nav UINavigationController.init(rootViewController: viewController) nav.topViewController?.title title// 设置导航栏的标题 nav.navigationBar.tintColor .whiteColor()// 设置push出的导航栏的返回颜色(箭头及文字) …

mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案

MySQL5.6主从复制(读写分离)方案一、前言&#xff1a;为什么MySQL要做主从复制(读写分离)&#xff1f;通俗来讲&#xff0c;如果对数据库的读和写都在同一个数据库服务器中操作&#xff0c;业务系统性能会降低。为了提升业务系统性能&#xff0c;优化用户体验&#xff0c;可以通…

在实践中使用延迟队列

通常&#xff0c;在某些情况下&#xff0c;当您有某种工作或作业队列时&#xff0c;有必要不立即处理每个工作项或作业&#xff0c;而是要延迟一些时间。 例如&#xff0c;如果用户单击一个按钮来触发要完成的某项工作&#xff0c;而一秒钟后&#xff0c;用户意识到他/她错了&a…

PCL学习八叉树

建立空间索引在点云数据处理中有着广泛的应用&#xff0c;常见的空间索引一般 是自顶而下逐级划分空间的各种空间索引结构&#xff0c;比较有代表性的包括BSP树&#xff0c;KD树&#xff0c;KDB树&#xff0c;R树&#xff0c;四叉树&#xff0c;八叉树等索引结构&#xff0c;而…

Android实现自定义带文字和图片的Button

在Android开发中经常会需要用到带文字和图片的button&#xff0c;下面来讲解一下常用的实现办法。 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现&#xff0c;这种方式代码量最小。在Button的属性中有一个是drawableLeft&#xff0c;这个 属性可以…

mysql语句中的注释方法_MySQL语句注释方式简介

MySQL支持三种注释方式&#xff1a;1.从‘#字符从行尾。2.从‘-- 序列到行尾。请注意‘-- (双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。3.从/*序列到后面的*/序列。结束序列不一定在同一行中&#xff0c;因此该语法允许注释跨越多行。…

aqlserver实用程序_sqlserver命令提示实用工具的介绍

除上述的图形化管理工具外&#xff0c;SQL Server2008还提供了大量的命令行实用工具&#xff0c;包括bcp、dtexec、dtutil、osql、reconfig、sqlcmd、sqlwb和tablediff等&#xff0c;下面进行简要说明。dtexec实用工具用于配置和执行SQL Server2008 Intgration Services包。用户…

使用Java和Scala将Play Framework 2应用程序部署到Openshift

几个星期&#xff0c; 马克阿特伍德 &#xff08; Mark Atwood&#xff09; &#xff0c; 豪尔赫阿里斯 &#xff08; Jorge Aliss &#xff09;和我塞巴斯蒂安 斯卡塔诺 &#xff08; SebastinScarano&#xff09;参加了红帽网络研讨会LETS PLAY&#xff01; 在云端&#xff1…

LintCode 387: Smallest Difference

LintCode 387: Smallest Difference 题目描述 给定两个整数数组&#xff08;第一个是数组A&#xff0c;第二个是数组B&#xff09;&#xff0c;在数组A中取A[i]&#xff0c;数组B中取B[j]&#xff0c;A[i]和B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。 样例 给定数组A …