1.Full GC
在使用CMS的情况下,如果出现promotion failed或者concurrent mode failure,会触发Full GC。
下边通过代码来演示一下。
(1)promotion failed,代码如下:
public static void main(String[] args) throws Exception {
BigObj o1 = new BigObj(1024 * 1024 * 2);
BigObj o2 = new BigObj(1024 * 1024 * 2);
BigObj o3 = new BigObj(1024 * 1024 * 2);
System.out.println(">>> minor gc");
BigObj o4 = new BigObj(1024 * 1024 * 2);
TimeUnit.SECONDS.sleep(2);
BigObj o5 = new BigObj(1024 * 1024 * 2);
BigObj o6 = new BigObj(1024 * 1024 * 2);
System.out.println(">>> promotion failed");
BigObj o7 = new BigObj(1024 * 1024 * 2);
TimeUnit.SECONDS.sleep(2);
}
private static class BigObj {
private byte[] b;
public BigObj(int c) {
b = new byte[c];
}
}
参数:
-Xms20m -Xmx20m -Xmn10m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCMSInitiatingOccupancyOnly
我用的是sun JDK 1.6.0 u30 64位
在输出的日志中可以看到:
[GC 2.094: [ParNew: 6578K->6578K(9216K), 0.0000323 secs]2.094: [CMS: 6150K->8192K(10240K), 0.0145035 secs] 12728K->12449K(19456K), [CMS Perm : 3058K->3057K(21248K)], 0.0146291 secs] [Times: user=0.00 sys=0.02, real=0.01 secs]
(2)concurrent mode failure,代码同上,将参数改为:
-Xms20m -Xmx20m -Xmn10m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
在日志中可以看到:
[GC 2.105: [ParNew: 6562K->6562K(9216K), 0.0000330 secs]2.105: [CMS2.108: [CMS-concurrent-mark: 0.004/0.004 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
(concurrent mode failure): 6150K->8192K(10240K), 0.0173765 secs] 12712K->12449K(19456K), [CMS Perm : 3058K->3057K(21248K)], 0.0175193 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
2.preclean
CMS GC在remark之前有个concurrent abortable preclean的阶段。
当Eden的占用超过2M时,执行此阶段,一直持续到Eden的占用超过50%时,才触发remark。当然也不会一直持续下去,如果超过5000毫秒Eden的占用仍未超过50%时,也会结束此阶段,开始触发remark。这3个参数可以通过-XX:CMSScheduleRemarkEdenSizeThreshold -XX:CMSScheduleRemarkEdenPenetration -XX:CMSMaxAbortablePrecleanTime 分别进行设置。
(1)Eden占用不超过2M的情况:
代码如下:
public static void main(String[] args) throws Exception {
BigObj o1 = new BigObj(1024 * 1024 * 2);
BigObj o2 = new BigObj(1024 * 1024 * 2);
BigObj o3 = new BigObj(1024 * 1024 * 3);
System.out.println(">>> minor gc");
BigObj o4 = new BigObj(1024 * 1024 * 1);
TimeUnit.SECONDS.sleep(2);
}
参数:
-Xms20m -Xmx20m -Xmn10m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
在日志中可以看到:
2.116: [CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2.116: [GC[YG occupancy: 1615 K (9216 K)]2.116: [Rescan (parallel) , 0.0001575 secs]2.117: [weak refs processing, 0.0000058 secs] [1 CMS-remark: 7174K(10240K)] 8790K(19456K), 0.0002273 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
(2)Eden的占用超过50%:
代码如下:
public static void main(String[] args) throws Exception {
BigObj o1 = new BigObj(1024 * 1024 * 2);
BigObj o2 = new BigObj(1024 * 1024 * 2);
BigObj o3 = new BigObj(1024 * 1024 * 2);
System.out.println(">>> minor gc");
BigObj o4 = new BigObj(1024 * 1024 * 2);
TimeUnit.SECONDS.sleep(2);
BigObj o5 = new BigObj(1024 * 1024 * 3);
TimeUnit.SECONDS.sleep(2);
}
参数同上:
在日志中可以看到:
2.106: [CMS-concurrent-abortable-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2.106: [GC[YG occupancy: 5546 K (9216 K)]2.106: [Rescan (parallel) , 0.0001678 secs]2.106: [weak refs processing, 0.0000058 secs] [1 CMS-remark: 6150K(10240K)] 11696K(19456K), 0.0002596 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
(3)Eden的占用仍未超过50%,持续时间超过5000毫秒:
代码如下:
public static void main(String[] args) throws Exception {
BigObj o1 = new BigObj(1024 * 1024 * 2);
BigObj o2 = new BigObj(1024 * 1024 * 2);
BigObj o3 = new BigObj(1024 * 1024 * 2);
System.out.println(">>> minor gc");
BigObj o4 = new BigObj(1024 * 1024 * 2);
TimeUnit.SECONDS.sleep(2);
BigObj o5 = new BigObj(1024 * 1024 * 1);
TimeUnit.SECONDS.sleep(7);
}
参数同上:
在日志中可以看到:
CMS: abort preclean due to time 7.210: [CMS-concurrent-abortable-preclean: 0.076/5.093 secs] [Times: user=0.02 sys=0.00, real=5.10 secs]
7.210: [GC[YG occupancy: 3498 K (9216 K)]7.210: [Rescan (parallel) , 0.0002051 secs]7.210: [weak refs processing, 0.0000054 secs] [1 CMS-remark: 6150K(10240K)] 9648K(19456K), 0.0002727 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
如果增加参数:-XX:CMSMaxAbortablePrecleanTime=3000
日志变为:
CMS: abort preclean due to time 5.127: [CMS-concurrent-abortable-preclean: 0.044/3.024 secs] [Times: user=0.01 sys=0.00, real=3.02 secs]
5.127: [GC[YG occupancy: 3498 K (9216 K)]5.127: [Rescan (parallel) , 0.0001886 secs]5.127: [weak refs processing, 0.0000058 secs] [1 CMS-remark: 6150K(10240K)] 9648K(19456K), 0.0002634 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
另外我试了一下CMSScheduleRemarkEdenPenetration参数貌似不管用啊
分享到:
相关推荐
【CMS学习资料,精心整理】 CMS,全称Content Management System,即内容管理系统,是一种用于创建、管理和发布数字内容的软件平台。它简化了网站建设和维护的过程,使得非技术人员也能通过图形用户界面进行操作,...
帝国CMS学生学习知识点总结作文试题练习题考试资讯网站源码 带手机版 帝国CMS《学习》模板,简洁大气访问快,带一个漂亮体验好的手机端,中小学生知识点总结、试题、练习题、考试资讯、作文大全,学习方法技巧等,百度...
帝国CMS仿《问答库》题库问答学习平台完整打包源码+采集,知识付费网站模板 源码名称:仿《问答库》题库问答学习平台模板 知识付费网站源码 开发环境:帝国cms 7.5 安装环境:php+mysql 学历考试等各类题库以及一些...
- CMS可以作为学习资料的共享平台,通过发布文章、文档等方式,鼓励团队成员分享学习心得,促进共同进步。 7. **技术发展趋势** - 随着Web技术的发展,服务器型的档案系统和CMS成为了主流,替代了过去的文件夹...
2. **页面编辑**:除了文章,CMS还提供静态页面的创建和管理,用于构建网站的各个部分,如首页、关于我们、联系我们等。 3. **媒体管理**:一个有效的媒体库管理功能是必要的,用户可以上传、分类、预览和管理图片...
帝国CMS中小学生学习模板学生知识点总结试题练习题考试资讯网站源码 帝国CMS《学习》模板,简洁大气访问快,带一个漂亮体验好的手机端, 中小学生知识点总结、试题、练习题、考试资讯、作文大全,学习方法技巧等, 百度...
CMS32F033C程序是指CMS32F033的固件库或示例代码,手册可能包含了一些基本的应用实例和API函数说明,便于开发者快速上手。 总的来说,《CMS32F033用户手册》是开发基于CMS32F033的电子产品的必备资料,无论是硬件...
【标题】"一些cms项目。c#的"指的是基于C#编程语言开发的Content Management System(内容管理系统)项目。这些CMS系统通常用于构建和管理网站,提供了一套方便的后台工具,让非技术人员也能轻松编辑和发布内容。 ...
【压缩包子文件的文件名称列表】中,"PCHome_download.html"可能是一个下载页面的HTML源代码,它可能包含了关于这个CMS实例的介绍、安装指南或是下载链接。而"NJJIME223.ZIP"则是一个ZIP压缩文件,通常用于存储多个...
“CMS”标签表明这个教程是关于内容管理系统(Content Management System)的,特别是杰奇CMS和船说CMS。CMS是一种用于创建、编辑和管理网站内容的软件平台,通常包括模板设计、用户权限管理、数据存储等功能。通过...
### 什么是CMS以及学习了解CMS的意义 #### 一、CMS的概念与作用 CMS,全称为Content Management System(内容管理系统),是一种被广泛应用于网站建设和管理的软件工具或平台。它的核心功能在于提供一个易于操作的...
这个"ASP非常值得学习分析的CMS源码"显然是一款基于ASP技术的Content Management System(CMS)系统,CMS允许用户无需深入编程知识就能管理网站内容。 首先,我们要了解ASP的基本概念。ASP是在IIS(Internet ...
[企业政府]COMSHARP CMS(锐商企业CMS) v3.0 多国语言版_comsharp-cms.zip源码ASP.NET[企业政府]COMSHARP CMS(锐商企业CMS) v3.0 多国语言版_comsharp-cms.zip源码ASP.NET[企业政府]COMSHARP CMS(锐商企业CMS) v3.0 ...
"使用说明.txt"是关于如何使用这些接口和模板的文档,可能包括了配置接口、调用API以及导入WPM文件的步骤和注意事项。正确理解和使用这份文档对正确实现数据采集和整合至关重要。 在实际应用中,通过苹果CMS和...
帝国CMS7.5仿《问答库》题库问答学习平台网站源码 带手机版 开发环境:帝国cms 7.5 安装环境:php+mysql 学历考试等各类题库以及一些常见的普通练习的题目题库供大家查询。 特色功能: 1、同步生成WAP 2、带...
千锋网络安全渗透测试Web架构安全分析章节配套的一个网站源码(cms.zip),用于安全渗透学习,名称为:文章管理系统。使用前需要先配置数据库,导入mysql文件。 这个网站仅用于千锋网络安全学习使用,内容来源网络,...
苹果CMS是一款广泛应用于搭建视频网站的开源内容管理系统(CMS),主要...通过深入学习和理解这套源码,用户不仅可以快速搭建起一个功能齐全的视频网站,还能根据自身需求进行二次开发,打造出独具特色的在线影视平台。
在本案例中,"CMS 系统-bug很多,仅供学习参考" 暗示我们正在处理一个可能存在大量错误或不足的CMS系统,可能不适合商业使用,但对那些想要了解CMS工作原理或进行学习研究的人来说具有一定的价值。"CMS B2B"则表明这...
分析动易CMS6.8的源码可以帮助开发者深入理解其架构和设计模式,学习如何构建高效、可扩展的CMS系统。源码中可能包含系统核心类库、数据库访问层、业务逻辑层、视图层等多个部分,每个部分都有其特定的职责和设计...