es 调整gc_实际中进行GC调整

es 调整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

es 调整gc

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

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

相关文章

game connect4 java_为我的connect 4数学游戏创建一个积分系统

我试着在每次用户得到正确答案时加一分&#xff0c;如果在我的“连接4”数学游戏中答错了&#xff0c;我就拿走一分。在游戏中&#xff0c;用户把一个计数器放在想要的地方&#xff0c;问题就会弹出&#xff0c;等待答案&#xff0c;以便继续。这段代码中的所有内容都能正常工作…

内核中断处理流程_处理中断

内核中断处理流程我只是在观看Heinz Kabutz的VJUG采访 &#xff0c;这启发了我写一篇有关中断的文章。 顺便说一句&#xff0c;我建议您订阅VJUG YouTube频道 -确实非常有用。 Heinz始终是物有所值的&#xff0c;很难不学习很多东西就很难观看他的演讲。 他提出了如何处理Inte…

c语言中assert函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、assert将通过检查表达式expresion的值来决定是否需要终止执行程序。2、如果表达式expresion的值是假的(即0)&#xff0c;它将首先向标准错误流stderr打印错误信息。通过调用abort函数终止程序运行。否则&#xff0c;assert没有效…

java怎么清空一个文件内容_如何从文本文件中删除特定内容? - java

我正在Java的SO的帮助下从事此项目的工作&#xff0c;正在读取一个文件夹&#xff0c;然后将其内容写入文件。然后&#xff0c;我需要浏览该内容&#xff0c;仅保留末尾带有Thumbnail.jpg的图像。编辑&#xff1a;public static final File outFile new File(System.getProper…

sci检索没有馆藏号_转变馆藏

sci检索没有馆藏号您是否曾经想替换过HashSet或HashMap使用的equals和hashCode方法&#xff1f; 或者有一个List的一些元素类型伪装成的List相关类型的&#xff1f; 转换集合使这成为可能&#xff0c;并且本文将展示如何实现。 总览 转换集合是LibFX 0.3.0的一项功能&#xf…

c语言中exit和return的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、返回函数值的return是关键字&#xff0c;exit是一个函数。return是语言级的&#xff0c;它表示调用堆栈的返回&#xff1b;exit是系统调用级的&#xff0c;它表示一个过程的结束。2、return是函数的退出&#xff0c;exit是进程的…

java怎样返回json_java怎么返回json

详细内容本篇文章将介绍如何编写Java程序来返回Json数据&#xff0c;本次以三个方式进行介绍。推荐课程&#xff1a;Java教程&#xff0c;方式1&#xff1a;当然是手敲所有代码&#xff0c;来进行json数据的返回。需要 HttpHttpServletRequest request HttpServletResponse res…

junit测试类叫什么名字_使用Junit测试名称

junit测试类叫什么名字命名测试 当我们创建Junit测试时&#xff0c;通常没有方法名称的实际使用。 Junit运行器使用反射来发现测试方法&#xff0c;并且从版本4开始&#xff0c;您不再被限制以test开始方法的名称。 测试方法的名称用于文档目的。 人们遵循不同的风格。 您可以…

c语言中realloc函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、判断当前指针是否有足够的连续空间。如果足够&#xff0c;扩大ptr指向的地址并返回。如果不够&#xff0c;如何根据size指定的大小分配空间&#xff0c;将原始数据复制到新分配的内存中&#xff0c;然后释放原始ptr指向的区域。2…

java 暂停循环_java小白关于while死循环时处理办法的一发求助帖

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package greedsnake;import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.ev…

java jsp学习指南_JSP教程–最终指南

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

c语言中main函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、main函数是C程序的入口函数&#xff0c;即程序的执行从main函数开始&#xff0c;其他函数的调动也直接或间接地在main函数中调用。2、main函数的返回值用于解释程序的退出状态。若返回0&#xff0c;则表示程序正常退出。返回其他…

什么是通用字符名称?_通用名称

什么是通用字符名称&#xff1f;泛型类型参数名称通常包含一个大写字母字符。 如果您开始阅读有关泛型的官方ORACLE文档&#xff0c;则第一个示例是 /*** Generic version of the Box class.* param <T> the type of the value being boxed*/ public class Box<T>…

c语言中__cplusplus是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、__cplusplus和extern“C”一般都是配对使用&#xff0c;如果定义了__cplusplus(cpp文件默认定义了该宏)&#xff0c;则采用C语言方式进行编译。2、是在C中特有的&#xff0c;__cplusplus 其实就是C。实例#ifndef __CODERSRC_H__ …

git rollback代码都没了_git回滚线上代码

由于之前自己推代码的时候操作失误&#xff0c;才push代码的时候没有push到dev分支&#xff0c;而是push到了本地master同名分支的线上master分支&#xff0c;覆盖掉了线上在用的代码。在搜索解决办法的时候&#xff0c;发现网上给的信息大多不够全&#xff0c;且很多无用。所以…

c语言中fwirte函数的使用方法示例

点击上方蓝字关注我&#xff0c;了解更多咨询1、fwrite函数用于将缓冲区数据写入文件&#xff0c;并返回成功写入文件的元素数。如果出现错误或到达文件末尾&#xff0c;可能小于nmemb。2、fwrite函数不区分文件的尾部和错误&#xff0c;因此调用者必须使用feof和ferror来判断发…

联通光纤限制连接数_从数百万个光纤(而不是数千个线程)中查询数据库

联通光纤限制连接数jOOQ是在Java中执行SQL的好方法&#xff0c;而Quasar光纤带来了大大提高的并发性 我们很高兴在平行世界的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开放源代码堆栈&#xff0c;使开发人员可以轻松地在JVM上对…

java 工程新建ivy文件_Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

一、添加插件将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中二、在Windows上安装Hadoop2.7.5版本最好与Linux集群中的hadoop版本保持一致1、将hadoop-2.7.5-centos-6.7.tar.gz解压到Windows上的C盘software目录中2、配置hadoop的环境变量HADOOP_HOMEC:\softwa…

c语言中fclose函数的使用你会吗

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言fclose函数用于关闭使用fopen成功打开的文件。2、fopen函数和fclose函数总是成对出现。如果文件成功打开fopen函数&#xff0c;请使用fclose函数关闭文件。实例#include <stdio.h> #include <stdlib.h>int main…

悲观锁 引起死锁_悲观锁定时如何避免可怕的死锁-以及Java 8的一些用法!

悲观锁 引起死锁有时您根本无法避免&#xff1a;通过SQL进行悲观锁定。 实际上&#xff0c;当您要在共享的全局锁上同步多个应用程序时&#xff0c;它是一个很棒的工具。 有人可能认为这是在滥用数据库。 如果可以解决您遇到的问题&#xff0c;我们认为可以使用您拥有的工具。…