Memorydoc
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Memorydoc

术尚可求
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 并发编程

  • 设计模式

  • 数据结构算法

  • 技术拓展

  • 技术陷阱

  • 面试宝典

  • 微服务

  • 数据库

  • 项目优化背景

  • JVM优化

    • JVM优化实战
      • 服务器配置
      • JVM 核心参数
        • 并行收集器相关参数
        • 未进行任何优化
        • 优化第一次
  • 技术架构
  • JVM优化
Memorydoc
2022-03-07

JVM优化实战

# JVM优化实战

# 服务器配置

  • 8 核心 16G
  • JDK1.8

# JVM 核心参数

因为是电商项目,需要使用并发垃圾回收器相关的参数,所以这里就不介绍非并发垃圾回收器的相关参数了,有需要请百度查询。

# 并行收集器相关参数

|参数名称| 含义|默认值|| |-XX:+UseParallelGC | Full GC采用parallel MSC(此项待验证) |选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.(此项待验证) |

|-XX:+UseParNewGC |设置年轻代为并行收集 | 可与CMS收集同时使用JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值 |

|-XX:ParallelGCThreads| 并行收集器的线程数 | 此值最好配置与处理器数目相等 同样适用于CMS | |-XX:+UseParallelOldGC |年老代垃圾收集方式为并行收集(Parallel Compacting) |这个是JAVA 6出现的参数选项| |-XX:MaxGCPauseMillis |每次年轻代垃圾回收的最长时间(最大暂停时间) |如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.| |-XX:+UseAdaptiveSizePolicy| 自动选择年轻代区大小和相应的Survivor区比例 | 设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开. | |-XX:GCTimeRatio |设置垃圾回收时间占程序运行时间的百分比 |公式为1/(1+n) | |-XX:+ScavengeBeforeFullGC Full GC前调用YGC true |Do young generation GC prior to a full GC. (Introduced in 1.4.1.) |

# CMS相关参数

|-XX:+UseConcMarkSweepGC | 使用CMS内存收集 | 测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此时年轻代大小最好用-Xmn设置.??? | |-XX:+AggressiveHeap | |试图是使用大量的物理内存 长时间大内存使用的优化,能检查计算资源(内存, 处理器数量) 至少需要256MB内存 大量的CPU/内存, (在1.4.1在4CPU的机器上已经显示有提升)| |-XX:CMSFullGCsBeforeCompaction |多少次后进行内存压缩 |由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.| |-XX:+CMSParallelRemarkEnabled |降低标记停顿 || |-XX+UseCMSCompactAtFullCollection | 在FULL GC的时候, 对年老代的压缩 | CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。 可能会影响性能,但是可以消除碎片| |-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC| |-XX:CMSInitiatingOccupancyFraction=70| 使用cms作为垃圾回收 使用70%后开始CMS收集| 92 |为了保证不出现promotion failed(见下面介绍)错误,该值的设置需要满足以下公式CMSInitiatingOccupancyFraction计算公式| |-XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发| 92 | |-XX:+CMSIncrementalMode 设置为增量模式| | 用于单CPU情况| |-XX:+CMSClassUnloadingEnabled |||

# 未进行任何优化

系统QPS 较低, 所能承受的并发较低

img.png

# JVM 参数如下

-Xms1024m 
-Xmx1024m 
-XX:MaxMetaspaceSize=256m
1
2
3

可以看出默认所提供的 JVM 堆内存远远不足以维持系统的运行体量

# 优化第一次

编辑 (opens new window)
上次更新: 2022/05/01, 19:42:49
JVM优化实战

← JVM优化实战

最近更新
01
命令模式 原创
05-03
02
桥接模式 原创
05-02
03
优雅写代码三 原创
04-29
更多文章>
Theme by Memorydoc | Copyright © 2021-2022 Memorydoc | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式