小工具      在线工具  汉语词典  css  js  c++  java

JVM调优

Java,算法 额外说明

收录于:93天前

由于GC操作会挂起所有应用程序线程,因此JVM必须利用尽可能多的CPU资源,以尽可能缩短暂停时间。

JVM调优主要涉及以下两个指标的调整:

  • 暂停时间:垃圾收集器在进行垃圾收集时中断应用程序执行的时间。 -XX:MaxGCPauseMillis
  • 吞吐量:垃圾收集时间与总时间的比值:1/(1+n),吞吐量为1-1/(1+n)。 -XX:GC时间比率=n

我们项目的配置API和MT层配置如下:

1. API配置(CMS标记清除算法)

-Xms3072m -Xmx3072m -Xmn1500m -XX:SurvivorRatio=8 -XX:元空间大小=512m -XX:MaxMetaspaceSize=512m -XX:+禁用ExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection-XX:CMSInitiatingOccupancyFraction=70

2. MT配置(G1GC算法)

-Xms3g -Xmx3g -XX:元空间大小=256m -XX:+使用G1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8

3、验证配置的JVM参数,可以在发布日志中看到,如下:

[2020-12-29 08:43:12] [INFO] JVM参数配置成功。当前 JVM 参数为:

#!/bin/sh

APPNAME=Api.jar

JAVA_OPTS =“-Xms3072m -Xmx3072m -Xmn1500m -XX:SurvivorRatio = 8 -XX:MetaspaceSize = 512m -XX:MaxMetaspaceSize = 512m -XX:+禁用

leExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70

导出JAVA_OPTS

导出应用程序名称

结论:上面的API和MT配置是不同的。对此不必太担心。主要原因是使用的垃圾收集器不同。同时需要注意-Xms、-Xmx、-Xmn、MetaspaceSize的大小配置。

CMS是一种优先考虑响应时间的垃圾收集器,适用于网络游戏、电子商务、电信领域等应用服务器。所以我们的底层服务(MT层)使用CMS收集器

G1 GC 旨在取代 CMS,避免 CMS 的垃圾碎片。这里有一个导出excel的操作,可以避免垃圾碎片。

4.CMS回收器

CMS(Concurrent Mark Sweep)并发标记清除收集器

CMS(-XX:+UseConcMarkSweepGC)收集器用于老年代,收集主收集中不太可能到达的老对象。它与应用程序并发执行,老年代始终有足够的空间,保证年轻代不会出现晋升失败的情况。

CMS是一个基于标记和清除算法的多线程老一代垃圾收集器。 CMS是一种优先考虑响应时间的垃圾收集器,适用于网络游戏、电子商务、电信领域等应用服务器。

CMS与应用程序并发执行,即当CMS对老年代进行垃圾回收时,应用程序大部分时间可以继续执行,应用程序只需要很短的暂停。

CMS垃圾收集的特点是应用程序可以并发执行,因此应用程序停顿时间短,达到高响应时间的目的。

缺点方面,除了消耗较多的CPU资源外,由于是基于mark-clear算法,所以会造成内存碎片。为了解决内存碎片问题,CMS提供了JVM参数:-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=1,来配置老年代在进行Full GC时进行压缩和排序,并将内存碎片处理掉,其中配置了 CMSFullGCsBeforeCompaction。在执行内存压缩之前应该执行多少次Full GC。

CMS执行流程:初始标记(应用程序需要暂停)、并发标记(与应用程序并发执行)、并发预清理、重新标记、并发清除(应用程序需要暂停)、并发重置。

5、G1 GC(全称Garbage-First垃圾收集器,通过-XX:+UseG1GC参数启用)

G1 GC 旨在取代 CMS。与CMS相比,G1具有以下优势:

1.可预测的暂停模型

2.避免CMS垃圾碎片

3、超大桩性能更好

G1收集器的亮点之一是它使用暂停预测模型,根据用户配置的暂停时间来选择CSet的大小,从而达到用户期望的应用程序暂停时间。通过 -XX:MaxGCPauseMillis 参数设置。这有点类似于 ParallelScavenge 收集器。关于暂停时间的设置,越短越好。设置时间越短,意味着每次收集的CSet越小,这会导致垃圾逐渐堆积,最终不得不退化为Serial GC;如果暂停时间设置太长,会导致每次暂停时间过长,从而影响程序对外的响应时间。

G1垃圾收集分为两个阶段:

1.全局并发标记阶段(Global Concurrent Marking)、初始标记、并发标记、最终标记、清理

2、复制存活对象阶段(疏散),将一个Region中的存活对象复制到另一个Region,实现垃圾收集和清理。

六种名词解释

-Xms是jvm启动时分配的内存,如-Xms200m,表示分配200M

-Xmx是jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能占用500M内存。

-Xss是为jvm启动的每个线程分配的内存大小。 JDK1.4 中默认为 256K,JDK1.5+ 中默认为 1M。

-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小+老年代大小+持久代大小。持久代一般固定大小为64m,因此增加年轻代会减少老年代的大小。该值对系统性能影响很大。 Sun官方建议将其配置为整个堆的3/8。

-XX:+UseG1GC:使用G1垃圾收集器

-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,启用老年代的压缩

-XX:CMSFullGCsBeforeCompaction=0:当启用上述配置时,此处设置将使用多少次Full GC来压缩老年代。

-XX:+DisableExplicitGC:该参数用于禁止代码中显式调用GC。代码如何显示GC调用?它是通过 System.gc() 函数调用的。如果添加了这个JVM启动参数,那么代码中调用System.gc()将没有任何效果,相当于没有这行代码。系统自动触发GC,不受影响。

-XX:ParallelGCThreads=20:配置并行收集器的线程数,即有多少个线程可以同时进行垃圾收集。该值最好配置为等于处理器的数量。默认毫秒

-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最大时间。如果不能满足这个时间,JVM会自动调整年轻代的大小来满足这个值。默认毫秒

-XX:MetaspaceSize 元空间的大小。元空间的性质与永久代类似。它们都是JVM规范中方法区的实现。

不过,元空间和永久代最大的区别在于,元空间不在虚拟机中,而是使用本地内存。因此,元空间大小仅受本地内存限制。

默认20M

如果不配置-XX:MetaspaceSize,则触发FGC的阈值为21807104(约20.8m)。这个值可以通过 jinfo -flag MetaspaceSize pid 获得;

如果配置了-XX:MetaspaceSize,则触发FGC的阈值就是配置的值;

如果MaxMetaspaceSize设置太小,可能会导致频繁的FullGC甚至OOM;

MetaspaceSize和MaxMetaspaceSize设置大小相同;

整个JVM内存大小=年轻代大小+老年代大小+持久代大小

将 GC 打印到日志文件

-XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/Users/sunww/Desktop/logs/gc.log

链接:https://www.jianshu.com/p/b448c21d2e71

https://www.cnblogs.com/sxdcgaq8080/p/11089841.html

https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

https://zhuanlan.zhihu.com/p/141669715

https://www.cnblogs.com/yuanzipeng/p/13374690.html

. . .

相关推荐

额外说明

配置Nginx并发策略,防止别人恶作剧导致网站无法访问

以下配置在原生 nginx 上测试通过 如果你使用任何面板,请自行查找自定义nginx 配置的地方 修改 nginx.conf 配置 修改 nginx.conf ,在 http { } 段内添加以下两行参数 limit_conn_zone

额外说明

月薪2万的软件测试工程师应该具备哪些能力?你和老板有什么区别?

第一,强大的业务能力:很熟悉业务流程,熟悉业务模块、数据、架构,测试所需资源。了解测试所需时间。 第二,发现bug能力:一般问题发现的能力,隐性问题发现能力,连带问题发现能力,定位问题的能力。 第三,那就是团队协作:人员分工,与测试同事的配合,与开发的配

额外说明

aspose win/linux WORD转PDF(及其解决乱码方式)

aspose win/linux WORD转PDF(及其解决乱码方式) 1.工具类 2.控制台 3.解决乱码 4.JAR包 之前自己用的docm4j 本地进行转换是ok 在服务器中就异常了; 后来在网上查询之后 do4j无法支持liunx系统; 1.工具

额外说明

springboot+freemark+jpa角色权限脚手架-利用jpa进行数据库的增删改查操作

QQ 1274510382 Wechat JNZ_aming 商业互捧 QQ群538250800 技术搞事 QQ群599020441 技术合作 QQ群152889761 加入我们 QQ群649347320 纪年科技aming 网络安全 ,深度学习,嵌入式

额外说明

express框架中使用ejs

1.设置模块引擎为ejs app.set("view engine","ejs") 2. 设置模版文件存放位置 说明:模版文件:具有模版语法内容的文件。 app.set('vies',path.resolve(__dirname,"./views"))

额外说明

纯前端实现—“王者荣耀开局十秒倒计时效果”

实现效果: 源码: <!DOCTYPE html> <html lang="en">

额外说明

学习PWM的一些总结

(1)TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState) 这个函数,只有定时器TIM1 8 15 16 17使用时才调用; (2)TIMx_CRx中APRE:对时钟的控制寄存器进

额外说明

JQ制作一个目录树菜单

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>关于折叠菜单案例</title> <style> *{ margin: 0; paddin

额外说明

8.1 Ext JS应用测试概览

文章目录 关于测试 Sencha Test 总体介绍 单元测试 VS 功能测试 单元测试 功能测试 单元测试与功能测试比较 Sencha Test的组成 Sencha Studio STC 命令行工具 Sencha Test的功能 测试API Event

ads via 小工具