万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • 大纲

  • 走近Java

  • 内存与垃圾回收

  • 字节码与类加载

  • 性能监控与调优

  • 监控与性能调优案例

    • JVM监控与性能调优案例概述
    • Tomcat堆溢出分析
    • 堆溢出
    • 方法区溢出
    • GC overhead limit exceeded
    • 线程溢出
    • 调整堆大小提高服务的吞吐量
    • JVM优化之JIT优化
    • 合理配置堆内存
    • CPU占用很高排查方案
    • G1并发执行的线程数对性能的影响
      • 案例演示
      • 初始状态
      • 优化之后
      • 总结
    • 调整垃圾回收器提高服务的吞吐量
    • 日均百万级订单交易系统如何设置JVM参数
    • 内存泄漏与内存溢出
  • Java虚拟机
  • 监控与性能调优案例
2022-05-06
目录

G1并发执行的线程数对性能的影响

# G1并发执行的线程数对性能的影响

优化案例1中,Tomcat 使用的垃圾回收器是ParallelGC,这个案例更改为G1(Linux虚拟机更改为4核、8G)。尝试说明G1并发执行的线程数对性能的影响。

# 案例演示

初始Tomcat JVM参数设置(setenv.sh文件):

export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC"
export CATALINA_OPTS="$CATALINA_OPTS -Xms20m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:SurvivorRatio=8"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx20m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MetaspaceSize=64m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDateStamps"
export CATALINA_OPTS="$CATALINA_OPTS -Xloggc:/home/wenwl/apache-tomcat-8.5.66/logs/gc.log"
export CATALINA_OPTS="$CATALINA_OPTS -XX:ConcGCThreads=1"

其中参数-XX:ConcGCThreads=1可以在使用G1 GC 测试初始并发GC Threads之后再加上,因为没有配置的情况下:并发线程数是1。

初始化内存和最大内存调整小一些,目的发生 FullGC,关注GC时间 。

案例关注点是:GC次数,GC时间,以及Jmeter的平均响应时间。

# 初始状态

启动Tomcat后,查看进程默认的并发线程数(ConcGCThreads),默认为1:

perf_case5_1.png

使用jstat,查看压测前后JVM统计信息:

perf_case5_2.png

由上图可知,压力测试期间,YGC的次数为735次(750 - 15),时间为 1.983秒(2.057 - 0.074),每次YGC平均耗时 2.69ms;

期间没有发生1次过Full GC;GC总时间为1.983秒。

接下来关注压测数据: perf_case5_3.png

由上图可知,90%的请求响应时间为23ms,95%的请求响应时间为36ms,95%的请求响应时间为69ms,吞吐量为4737.5/sec。

# 优化之后

根据之前G1的参数介绍,将并发线程设置为2,并重启Tomcat之后测试。

export CATALINA_OPTS="$CATALINA_OPTS -XX:ConcGCThreads=2"

使用jstat,查看优化后的压测前后JVM统计信息:

perf_case5_4.png

由上图可知,压力测试期间,YGC的次数为669次(687 - 9),时间为 1.786秒(1.831 - 0.045),每次YGC平均耗时 2.66ms;

期间发生过1次 Full GC;GC总时间为 1.814秒。

接下来关注优化后压测数据:

perf_case5_5.png

由上图可知,90%的请求响应时间为22ms,95%的请求响应时间为34ms,99%的请求响应时间为64ms,吞吐量为4880.9/sec。

# 总结

总的来说,增加了G1并发线程数之后,由于GC总时间略微下降的,平均吞吐量有略微提升,特别是在90%、95%、99%的平均响应时间有明显下降。仅从效果上来看,我们这次的优化是有一定效果的。在工作中对于线上项目进行优化的时候,可以考虑到这方面的优化。 此外,注意G1垃圾收集器是在大内存应用上则发挥其优势,平衡点在6-8GB之间。

#JVM监控与性能调优案例
上次更新: 5/28/2023, 10:57:53 PM
调整垃圾回收器提高服务的吞吐量

调整垃圾回收器提高服务的吞吐量→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式