实际中进行GC调整

孤立的垃圾车 调优垃圾回收与任何其他性能调优活动没有什么不同。

您需要确保了解当前的情况和期望的结果,而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常,只需执行以下过程即可:

  1. 陈述您的绩效目标
  2. 运行测试
  3. 测量
  4. 与目标比较
  5. 进行更改并返回运行测试

重要的是,可以设定和衡量目标的三个维度都与性能调整有关。 这些目标包括延迟,吞吐量和容量,理解,我建议您阅读垃圾收集手册中的相应章节。

让我们看看我们如何开始研究设定和实现这些目标的实际情况。 为此,让我们看一个示例代码:

//imports skipped for brevity
public class Producer implements Runnable {private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);private Deque<byte[]> deque;private int objectSize;private int queueSize;public Producer(int objectSize, int ttl) {this.deque = new ArrayDeque<byte[]>();this.objectSize = objectSize;this.queueSize = ttl * 1000;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {deque.add(new byte[objectSize]);if (deque.size() > queueSize) {deque.poll();}}}public static void main(String[] args) throws InterruptedException {executorService.scheduleAtFixedRate(new Producer(200 * 1024 * 1024 / 1000, 5), 0, 100, TimeUnit.MILLISECONDS);executorService.scheduleAtFixedRate(new Producer(50 * 1024 * 1024 / 1000, 120), 0, 100, TimeUnit.MILLISECONDS);TimeUnit.MINUTES.sleep(10);executorService.shutdownNow();}
}

该代码将提交两个作业,每100毫秒运行一次。 每个作业都模拟具有特定寿命的对象:它创建对象,让它们离开预定的时间,然后忘记它们,从而使GC回收内存。

在使用以下参数打开GC日志记录的情况下运行示例时

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps

我们开始立即在日志文件中看到GC的影响,类似于以下内容:

2015-06-04T13:34:16.119-0200: 1.723: [GC (Allocation Failure) [PSYoungGen: 114016K->73191K(234496K)] 421540K->421269K(745984K), 0.0858176 secs] [Times: user=0.04 sys=0.06, real=0.09 secs] 
2015-06-04T13:34:16.738-0200: 2.342: [GC (Allocation Failure) [PSYoungGen: 234462K->93677K(254976K)] 582540K->593275K(766464K), 0.2357086 secs] [Times: user=0.11 sys=0.14, real=0.24 secs] 
2015-06-04T13:34:16.974-0200: 2.578: [Full GC (Ergonomics) [PSYoungGen: 93677K->70109K(254976K)] [ParOldGen: 499597K->511230K(761856K)] 593275K->581339K(1016832K), [Metaspace: 2936K->2936K(1056768K)], 0.0713174 secs] [Times: user=0.21 sys=0.02, real=0.07 secs]

根据日志中的信息,我们可以着眼于三个不同的目标来改善情况

  1. 确保最坏情况下的GC暂停不超过预定阈值
  2. 确保停止应用程序线程的总时间不超过预定阈值
  3. 降低基础架构成本,同时确保我们仍然可以实现合理的延迟和/或吞吐量目标。

为此,上面的代码在三种不同的配置上运行了10分钟,导致下表总结了三种截然不同的结果:

GC算法 有用的工作 最长的停顿
-Xmx12g -XX:+ UseConcMarkSweepGC 89.8% 560毫秒
-Xmx12g -XX:+ UseParallelGC 91.5% 1,104毫秒
-Xmx8g -XX:+ UseConcMarkSweepGC 66.3% 1,610毫秒


实验使用不同的GC算法和不同的堆大小运行相同的代码,以测量有关延迟和吞吐量的垃圾收集暂停的持续时间。 有关实验的详细信息和结果的解释,请参见《 垃圾收集手册》 。 请看一下手册中的示例,了解配置的简单更改如何使示例在延迟,容量吞吐量方面完全不同。

请注意,为了使示例尽可能简单,仅更改了有限数量的输入参数,例如,实验未在不同数量的内核或不同的堆布局上进行测试。

翻译自: https://www.javacodegeeks.com/2015/06/gc-tuning-in-practice.html

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

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

相关文章

达梦数据库出现卡慢简单分析点

1.检查是否有锁表 查询锁表&#xff1a;select sess_id,sql_text from v$sessions sess,v$lock lck where sess.trx_idlck.trx_id and lck.blocked1; --查询僵死会话 解锁&#xff1a;根据会话ID&#xff0c;停止会话 sp_close_session(sess_id); 2.根据v$sessions,V$L…

SEL selector (二)

SEL消息机制工作原理是什么 引用下面文章&#xff1a; 我们在之前有提到,一个类就像一个 C 结构.NSObject 声明了一个成员变量: isa. 由于 NSObject 是所有类的根类,所以所有的对象都会有一个 isa 的成员变量[公共继承].而该 isa 变量指向该对象的类(图3.15)[类在Objective-C中…

mobile cpu上禁用alpha test的相关总结

因为&#xff0c;每家芯片的特性不同&#xff0c;根据向framebuffer写法的不同&#xff0c;分为tile-based的mobile cpu&#xff0c;如ImgTec PowerVR&#xff0c;ARM Mali&#xff0c;一部分老版本Qualcomm Adreno。还有标准的direct&#xff08;immediate&#xff09;的mobil…

达梦定时迁移数据

1. 生成迁移源代码 1.1 启动DM迁移工具&#xff08;bin/dts.exe&#xff09; 1.2 右击迁移管理空白处 -> 新建工程 1.3 展开工程 -> 右击迁移&#xff0c;新建迁移 -> 输入迁移名称&#xff0c;确认 1.4 右击迁移名称&#xff0c;打开 -> 输入源数据库连接信息&…

JSP教程–最终指南

编者注&#xff1a; JavaServer Pages&#xff08;JSP&#xff09;技术使您可以轻松创建同时包含静态和动态组件的Web内容。 JSP技术提供了Java Servlet技术的所有动态功能&#xff0c;但提供了一种更自然的方法来创建静态内容。 JSP技术的主要功能包括用于开发JSP页面的语言&…

tongweb6数据源使用中时常报空异常处理方式

1.在tongweb控制台 -> jdbc配置中设置数据源参数 1.1 勾选空闲超时&#xff0c;时间默认 1.2 勾选泄露超时时间 &#xff0c;时间为半天&#xff08;14400&#xff09; 1.3 勾选连接有效性检查、创建连接验证、获取连接验证、归还连接验证 图中设置泄露超时时间为900…

eclipse远程tomcat javaweb debug样例(windows)

1.tomcat配置可被远程debug端口参数 catalina.bat 中添加 set CATALINA_OPTS-Xdebug -agentlib:jdwptransportdt_socket,servery,suspendn,address8000 导出项目war包到tomcat/webapps/目录下 切换到tomcat/bin目录下 双击startup.bat启动运行项目 2.eclipse中启动远程debug…

ASP.NET MVC的ContentResult

ASP.NET MVC的ContentResult返回简单的纯文本内容&#xff0c;可通过ContentType属性指定应答文档类型&#xff0c;通过ContentEncoding属性指定应答文档的字符编码。一个例子来演习&#xff0c;自定义一个RwResult&#xff0c;它继承ContentResult&#xff0c;为视图象ASP.NET…

windows搜索指定目录下包含某个字符串的文件

1.打开cmd窗口 &#xff1a;winr 快捷键-> 输入cmd 回车 2.切换到被搜索的文件夹&#xff08;E:\shgwy文档\日常\更新\20220808&#xff09;下 如输入&#xff1a; cd E:\shgwy文档\日常\更新\20220808 e: 3.输入搜索命令 c:\Windows\System32\findstr.exe /s /i "wa…

IIS7日志文件位置

准备统计下页面访问量 查找IIS日志,发现在以前IIS6日志的位置&#xff0c;竟然木有找到日志... 查看下IIS设置&#xff0c;发现IIS7和6的默认日志位置不一样额... IIS 6 Log files location IIS 6中日志文件的位置 %windir%\System32\LogFiles IIS 7 Log files location IIS的日…

jwt重放攻击_4个点搞懂JWT、JWS、JWE

1.JWT是何物&#xff0c;有哪些常用的场景JWT(json web token)是设计一种简洁&#xff0c;安全&#xff0c;无状态的token的实现规范rfc7519&#xff0c;通常用于网络请求方和网络接收方之间的网络请求认证。jwt的常用场景1.1: restful api接口的无状态认证, 在传统的web应用中…

Verification Mind Games---how to think like a verifier像验证工程师一样思考

1. 有效的验证需要验证工程师使用不同于设计者的思维方式思考问题。具体来说&#xff0c;验证更加关心在严格遵循协议的基础上发现设计里面的bug&#xff0c;搜索corner cases&#xff0c;对设计的不一致要保持零容忍的态度。mindset&#xff1a;一套人们应该持有的确定的态度&…

discuz安装_手动搭建 Discuz! 论坛

一、搭建LAMP环境安装软件(Apache、MariaDB、PHP)yum install httpd php php-fpm php-mysql mariadb mariadb-server -y2.启动服务systemctl start httpdsystemctl start mariadbsystemctl start php-fpm3.安装后首次启动mariadb设置mysql_secure_installation4.登录 MariaDB&a…

蓝桥杯 1223 第 2 场 小白入门赛

蓝桥小课堂-平方和 模拟 1 2 2 2 3 2 ⋯ n 2 n ⋅ ( n 1 ) ⋅ ( 2 n 1 ) 6 1^22^23^2\cdotsn^2\dfrac{n\;\cdot\;(n 1)\;\cdot\;(2n1)}{6} 122232⋯n26n⋅(n1)⋅(2n1)​。 write(n * (n 1) * (n * 2 1) / 6);房顶漏水啦 m a x ( 最大的行 − 最小的行 , 最大的列 −…

jar包是什么意思_面试难度五颗星:JVM有Full GC,为什么还会 OutOfMemoryError?

点击上方蓝色“后端面试那些事儿”&#xff0c;选择“设为星标”学最好的别人&#xff0c;做最好的我们来源&#xff1a;R 大zhihu.com/question/38511221问题&#xff1a;R大回复平时有逛知乎的习惯&#xff0c;一般对JVM相关话题比较感兴趣。偶然看到这个问题&#xff0c;结果…

系统执行sql很慢达梦工具执行很快的简单解决方式

现象描述&#xff1a;系统功能查询很慢&#xff0c;拷贝查询sql到达梦工具中执行速度很快 1.问题分析&#xff1a; 达梦SQL执行耗时异常问题排查_qq_39693441的博客-CSDN博客_sql耗时分析 2.解决方式1&#xff1a; 在程序sql中拼接随机数如&#xff1a; select /*动态随机数*…

roads 构筑极致用户体验_长安马自达「悦马星空」计划上线,为用户带来极致服务体验...

日前,第十八届广州车展顺利举行。期间各大汽车品牌齐聚亮相,这其中,也包括众人熟悉的长安马自达。据悉,在本次车展上,长安马自达除携品牌全系车型次世代MAZDA3 昂克赛拉、2020款MAZDA CX-5、MAZDA CX-30和MAZDA CX-8亮相外,还正式发布「悦马星空」用户共创计划。资料显示,「悦马…

从数百万个光纤(而不是数千个线程)中查询数据库

jOOQ是在Java中执行SQL的好方法&#xff0c; Quasar光纤带来了大大提高的并发性 我们很高兴在平行宇宙的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开源堆栈&#xff0c;使开发人员可以轻松地在JVM上对极端的并发应用程序进行编码…

Oracle11.2.0.4 RAC安装文档

1 环境配置 参考官方文档《Grid Infrastructure Installation Guide for Linux》 1.1 软件环境 操作系统&#xff1a; [roothowe1 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.2 (Santiago) [roothowe1 ~]# uname -a Linux howe1 2.6.32-220.el6.i…

captcha库_将CAPTCHA添加到您的GWT应用程序

captcha库什么是验证码&#xff1f; 在一个充满恶意机器人的世界中&#xff0c;您应该怎么做才能保护您宝贵的Web应用程序&#xff1f; 您真正应该做的基本事情之一就是向其中添加CAPTCHA功能。 如果您不熟悉&#xff08;听起来有些奇怪&#xff09;&#xff0c;则CAPTCHA是确保…