热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JVM调优实战之三种垃圾收集器组合性能比较(GCEasy日志分析)

指标参数机器8C16G操作系统LinuxWEB服务器Tomcat首先我们根据Java Performance推荐公式配置最优GC参数 Xmx和Xms设置为老年代存活对象的3-4倍,即F
指标参数
机器8C16G
操作系统Linux
WEB服务器Tomcat

首先我们根据Java Performance推荐公式配置最优GC参数
performance.png
Xmx和Xms设置为老年代存活对象的3-4倍,即Full GC之后老年代内存占用的3-4倍
永久代(元空间)设置为老年代存活对象的1.2-1.5倍
Xmn设置为老年代存活对象的1-1.5倍
老年代内存大小设置为老年代存活对象的2-3倍
image.png
经过测试发现Full GC后老年代内存占用为136m左右,所以设置Xms和Xmx为512m,Xmn设置为192m

吞吐量优先

GC参数设置

#初始堆大小/最大堆大小/新生代大小/元空间大小/元空间最大允许大小/线程栈大小
-Xms512m -Xmx512m -Xmn192m -XX:MetaspaceSize=192m -XX:MaxMetaspaceSize=320m -Xss512k
#垃圾回收器(ps和po)
-XX:+UseParallelGC -XX:+UseParallelOldGC
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-ps-po.log

查看JVM参数信息:jmap -heap pid
image.png

压测接口

线程组配置1600*5000
image.png
花费共29min13s

吞吐量

image.png
平均吞吐量为4564.6

RT

image.png
平均响应时间为348ms

TPS

image.png

GC统计信息

grafana+prometheus监控图
image.png
GC Easy进行gc日志分析
image.png
image.png
image.png
image.png

堆内存统计信息

image.png
image.png
image.png

结果分析

GC总耗时:63.326s
Young GC总耗时:61.246s
Full GC总耗时:2.080s
最大GC停顿时间:210ms

响应时间优先

GC参数设置

#初始堆大小/最大堆大小/新生代大小/元空间大小/元空间最大允许大小/线程栈大小
-Xms512m -Xmx512m -Xmn192m -XX:MetaspaceSize=192m -XX:MaxMetaspaceSize=320m -Xss512k
#垃圾回收器(ParNew和CMS)
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-parnew-cms.log

查看JVM参数信息:jmap -heap pid
image.png

压测接口

线程组配置1600*5000
image.png
花费共30min22s

吞吐量

image.png
平均吞吐量为4392.0

RT

image.png
平均响应时间为361ms

TPS

image.png

GC统计信息

grafana+prometheus监控图
image.png
GC Easy进行GC日志分析
image.png
image.png
image.png
image.png
image.png

堆内存统计信息

image.png
image.png
image.png

结果分析

GC总耗时:55.627s
Young GC总耗时:55.627s
Full GC总耗时:0s
最大GC停顿时间:90ms

全功能垃圾收集器

GC参数设置

#初始堆大小/最大堆大小/元空间大小/线程栈大小
-Xms2048m -Xmx2048m -XX:MetaspaceSize=128m -Xss512k
#垃圾回收器(G1)/期望最大停顿时间
-XX:+UseG1GC -XX:MaxGCPauseMillis=80
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-g1.log

查看JVM参数信息:jmap -heap pid
image.png

压测接口

线程组配置1600*5000
image.png
花费共27min37s

吞吐量

image.png
平均吞吐量为4828.7

RT

image.png
平均响应时间为329ms

TPS

image.png

GC统计信息

grafana+prometheus监控图
image.png
GC Easy进行GC日志分析
image.png
image.png
image.png
image.png

堆内存统计信息

image.png
image.png
image.png

结果分析

GC总耗时:14.630s
最大GC停顿时间:80ms

结论
指标吞吐量TPS/s响应时间(ms)GC总耗时(s)最大GC停顿时间(ms)
吞吐量优先98.134%4564.634863.326210
响应时间优先97.112%4392.036155.62790
全功能99.138%4828.732914.63080

在低延时接口下,三者对比性能其实没有很大差别,但相对来说,使用G1垃圾回收器性能明显会更优于其他两种策略,但是G1适用于堆内存较大的场景,我们还是需要具体场景具体分析


推荐阅读
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 洞态IAST Java Agent 实现AOP技术详解
    本文深入探讨了洞态IAST Java Agent如何通过AOP技术实现方法调用链和污点值传播等功能,为读者提供了详细的源码分析。 ... [详细]
  • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
    本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
  • 大数据基础:JavaSE_day06 ... [详细]
  • Java性能优化策略详解
    在Java开发中,性能优化是提高应用程序响应速度和资源利用率的关键。本文详细探讨了多种Java性能优化技巧,包括合理使用单例模式、避免滥用静态变量、减少对象创建、使用final修饰符、合理管理线程同步等,旨在帮助开发者写出更加高效稳定的代码。 ... [详细]
author-avatar
沙尘jr暴的天下
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有