Java GC 调试手记
摘要
本文记录GC调试的一次实验过程和结果。
GC知识要点回顾
在32核处理器的系统上,10%的GC时间导致75%的吞吐量损失。所以在大型系统上,调试GC是以小博大的不错选择。'small
improvements in reducing such a bottleneck can produce large gains in performance.'

- 选择合适的GC Collector
- 整个JVM Heap堆的大小
- Young Generation的大小(-Xmn?m or -XX:NewRatio=?)
| GC shortname | Generation | Command line parameter | Comment |
|---|---|---|---|
|
Copy |
Young |
|
The Copying collector |
|
MarkSweepCompact |
Tenured |
|
The Mark and Sweep Compactor |
|
ConcurrentMarkSweep |
Tenured |
|
The Concurrent Mark and Sweep Compactor |
|
ParNew |
Young |
|
The parallel Young Generation Collector — can only be used with the Concurrent mark and sweep compactor. |
|
PS Scavenge |
Young |
|
The parallel object scavenger |
|
PS MarkSweep |
Tenured |
|
The parallel mark and sweep collector |
- Serial 单线程
- Parallel 多线程并行, GC线程和App线程取一运行,即GC要Stop the (app) world。
- Concurrent 多线程并发,GC线程和App线程可同时运行。(注: Young generation 没有CMS,取而代之的是可和CMS(Old)一起运行的ParNew)

- CATALINA_OPTS="$CATALINA_OPTS -verbose:gc -Xloggc:/usr/local/tomcat/gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
- CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
- vi jstatd.all.policy
- grant codebase "file:${java.home}/../lib/tools.jar" {
- permission java.security.AllPermission;
- };
- jstatd -J-Djava.security.policy=jstatd.all.policy
visualgc 102592@remote.domain
测试
|
|
||||||||||||||||||
- 使用用Jmeter压力测试
- 共6个client,每个client启动30个线程发送请求
- 每个请求从16种测试样例中随机挑选一个,发送到server端
- 测试持续10min
- server使用默认GC(PS Scavenge和PS MarkSweep)
- server使用CMS(-XX:+UseConcMarkSweepGC-XX:+UseParNewGC)
- server使用CMS(-XX:+UseConcMarkSweepGC -XX:+UseParNewGC),设置Young
generation的大小为200m(-Xmn200m) - server使用CMS(-XX:+UseConcMarkSweepGC -XX:+UseParNewGC),设置Young
generation的大小为600m(-Xmn600m)
- Jmeter请求的summary report
- server端累积GC时间和次数
(PS Scavenge和PS MarkSweep)
(ParNew和CMS)- Expect longer young GC times
- Due to slower allocations into the old gen
- Expect better worst-case latencies
- CMS does its work mostly-concurrently
- Shorter worst-case pauses
- Expect lower throughput
- CMS does more work
(PS Scavenge和PS MarkSweep)
(ParNew和CMS)cms gc logs和jstat显示的full GC次数与CMS周期的关系中我推测visualgc与jstat显示一致,都是统计old的回收次数;而Full GC则是Young和Old一起回收,在其他类型的GC里,Old只有Full GC时才触发)。
* cpu #来设置Young gen的大小;600m则是与PS下的Young gen一致。
200m
600m结论
Java GC 调试手记的更多相关文章
- Java垃圾回收(java GC)
一.GC的阶段 对每个对象而言,垃圾回收分为两个阶段:finalization和reclamation. finalization: 指运行这个对象的finalize的方法. reclamation: ...
- Java 动态调试技术原理及实践
本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停顿,使得整个应用停止响应. ...
- 详解Java GC的工作原理+Minor GC、FullGC
详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...
- Java GC回收机制
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- JAVA GC 简单总结
GC分代 GC的英文全拼是Garbage Collection,意思是垃圾收集. Java 将堆内存分为三代来管理: - 年轻代 (Young Generation) - 年老代 (Old Gener ...
- Java GC收集器配置说明
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...
- java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互
java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...
- Java GC系列(4):垃圾回收监视和分析
本文由 ImportNew - lomoxy 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这个Java GC系列教程中,让我们学习 ...
- 应用JConsole学习Java GC
应用JConsole学习Java GC 关于Java GC的知识,好多地方都讲了很多,今天我用JConsole来学习一下Java GC的原理. GC原理 在我的上一篇中介绍了Java运行时数据区,在了 ...
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
随机推荐
- Web 国际化:新增越南语语系(vue i18n)
前提: 1. 在src/locales文件夹中,新增vi.json文件 背景: 1. vue 步骤: 1. 在main.js中, import VueI18n from 'vue-i18n' Vue. ...
- AGC007F 题解
题意 给定两个长为 \(n\) 的字符串 \(S, T\),求最少进行多少次操作才能使 \(S = T\). 一次操作定义为:对于 \(i = 1, 2, .. n\),令第 \(i\) 位为操作后的 ...
- C# HttpClient 基本使用方式(一)
.NetCore主要提供了HttpWebRequest,WebClient,HttpClient这三种访问web的方式,其中HttpWebRequest,WebClient都在官方被标注为已过时,如果 ...
- CSS – RWD (Responsive Web Design) 概念篇
介绍 Only PC 以前是没有手机的, 只有电脑, 所以做开发, 只需要开发电脑版本就可以了. Mobile Version 后来手机诞生, 有钱的公司就做两个版本, 一个手机版, 一个电脑版. 没 ...
- Open Graph protocol
大纲介绍 Open Graph protocol 是 facebook 2010 年推出的一套规范, 用途是通过一些简单的 meta tag 来描述网站的内容. 这样在 sharing 网址的时候就可 ...
- 配置 kali linux 的 apt (包管理工具) ,换成国内源
1. 查看 apt 的源 输入命令: vim /etc/apt/sources.list 修改之后: 快捷键 A 进入编辑模式 : ESC 键 然后 输入 " :wq " 就 ...
- 云原生爱好者周刊:Cilium 放大招,发布服务网格 Beta 版
云原生一周动态要闻: Cilium 推出服务网格测试计划 Knative 已申请成为 CNCF 的孵化项目 Kubernetes v1.23 即将发布 Lens 5.3 发布 开源项目推荐 文章推荐 ...
- Python实现火柴人的设计与实现
1.引言 火柴人(Stick Figure)是一种极简风格的图形,通常由简单的线段和圆圈组成,却能生动地表达人物的姿态和动作.火柴人不仅广泛应用于动画.漫画和涂鸦中,还可以作为图形学.人工智能等领域的 ...
- python-mongodb简单封装
#!/usr/bin/python # -*- coding: UTF-8 -*- '''@auther :mr.qin @IDE:pycharm''' import pymongo from too ...
- 选择程序设计(python)
文章目录 1.基本概念 2.程序基本结构 3.实例 3.1 判断一个人年龄属于未成年人还是成年人 3.2判断是否是闰年 1.基本概念 Python选择程序设计是通过一条或多条语句的执行结果(True或 ...