精华内容
下载资源
问答
  • 主要介绍了Jvm调优和SpringBoot项目优化,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
  • JVM调优.pdf

    2017-08-10 13:30:40
    JVM调优 调优参数 调优方法 , 调优手段 等.
  • 关于TProfiler实际用法及其注意事项,请参考博客JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码(实测可用),地址:http://blog.csdn.net/q915730058/article/details/79136805
  • jvm调优示例

    2015-11-02 16:49:16
    jvm调优示例程序程序 具体描述 见 blog blog.csdn.net\jingshuaizh
  • JVM调优实战

    2015-05-22 16:20:40
    JVM调优实战 介绍JVM调优的技巧相关参数的设置等等
  • JVM调优书籍

    2019-01-06 22:38:04
    JVM调优书籍值得拥有 包含各种案例和场景,作者结合实际场景介绍
  • 分析常见的JVM调优技术及其相关条件,以及在实战中怎么使用到相关的技术进行调优,比较适合中高级开发进行学习,适合对JVM理解较深的开发学习
  • JVM调优攻略.pdf

    2020-07-27 17:56:15
    JVM调优攻略.pdf!
  • 马老师jvm实战调优课堂笔记,需要的小伙伴赶紧下载
  • JVM调优总结 JVM调优总结 JVM调优总结
  • 系统和JVM调优,深入浅出,简单实用。 配有视频,资料,代码,可以结合视频自己操作。 足够应付面试场景,非常适合面试突击。
  • jvm 调优的详细介绍

    2018-10-24 18:05:08
    好东西,jvm 调优的详细介绍,让你瞬间明白,打车大图
  • JVM调优基本步骤

    2021-08-30 09:07:35
    本文来说下JVM调优基本步骤 文章目录概述 概述

    本文来说下JVM调优基本步骤


    概述

    JVM性能优化步骤

    在这里插入图片描述


    调什么

    JVM调优:1、是想调什么,2、能调什么(只能调开放接口的,很多东西不一定开放接口给你调整),综合考虑只有如下两个方面:

    • 内存方面
    • 线程方面

    内存方面

    内存方面

    • JVM需要的内存总大小。
    • 各块内存分配,新生代、存活区、老年代。
    • 选择合适的垃圾回收算法、控制GC停顿次数和时间。
    • 解决内存泄漏的问题,辅助代码优化。
    • 内存热点:检查哪些对象在系统中数量最大,辅助代码优化。

    线程方面

    线程方面

    • 死锁检查,辅助代码优化。
    • Dump线程详细信息:查看线程内部运行情况,查找竞争线程,辅助代码优化。
    • CPU热点:检查系统哪些方法占用了大量CPU时间,辅助代码优化。

    如何调优

    如何调优

    • 监控JVM的状态,主要是内存、线程、代码、I/O几部分。
    • 分析结果,判断是否需要优化。
    • 调整:垃圾回收算法和内存分配,修改并优化代码。
    • 不断的重复监控、分析和调整,直至找到优化的平衡点。

    JVM调优的目标

    JVM调优的目标

    • GC的时间足够小。
    • GC的次数足够小。
    • 将转移到老年代的对象数量降低到最小。
    • 减少Full GC的执行时间。
    • 发生Full GC的间隔时间足够的长。

    常见的调优策略

    常见的调优策略

    • 减少创建对象的数量。
    • 减少使用全局变量和大对象。
    • 调整新生代、老年代的大小到最合适。
    • 选择合适的GC收集器,并设置合理的参数。

    JVM调优的思考

    JVM调优的思考

    • 多数的Java应用不需要在服务器上进行GC优化。
    • 多数导致GC问题的Java应用,都不是因为参数设置错误,而是代码问题。
    • 在应用上线前,先考虑将机器的JVM参数设置到最优(最合适)。
    • JVM优化是到最后不得已才采用的手段。
    • 在实例使用中,分析JVM情况优化代码比优化JVM本身要多得多。

    如下情况通常不用优化:

    • Minor GC执行时间不到50ms。
    • Minor GC执行不频繁,约10秒甚至更差时间才执行一次。
    • Full GC执行时间不到1s。
    • Full GC执行频率不算频繁,不低于10分钟1次。

    JVM调优经验

    JVM调优经验

    • 要注意32位和64为操作系统的区别,32位操作系统支持的内存理论上最多为2的32次方4G,而64位操作系统理论的寻址能力为2的64次方,内存识别的多少是和计算机cpu的寻址有关。
    • 注意client模式和Server模式的选择。
    • 要想GC的时间小必须要一个更小的堆,而要保证GC次数足够少,又必须要保证一个更大的堆,这两个是有冲突的,只能取其平衡。
    • 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值。
    • 新生代和老年代将根据默认的比例(1:2)分配内存堆,可以通过调整二者之间的比率NewRadio来调整,也可以通过-XX:newSize -XX:MaxNewSize来设置其绝对大小,同样,为了防止新生的堆收缩,通常会把-XX:newSize -XX:MaxNewSize设置为同样大小。
    • 合理规划新生代和老年代的大小。
    • 如果应用存在大量的临时对象,应该选择更大的新生代;如果存在相对较多的持久对象,老年代应该适当增大。在抉择时应该本着Full GC尽量少的原则,让老年代尽量缓存常用对象,JVM的默认比例1:2也是这个道理。
    • 通过观察应用一段时间,看其在峰值时老年代会占多少内存,在不影响Full GC的前提下,根据实际情况加大新生代,但应该给老年代至少预留1/3的增长空间。
    • 线程堆栈的设置:每个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太大了,一般256K就足够了。在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程。

    内存泄漏

    内存泄漏导致系统崩溃前的一些现象,比如:

    • 每次垃圾回收时间越来越长,Full GC时间也延长到好几秒。
    • Full GC的次数越来越多,最频繁时隔不到1分钟就进行一次Full GC。
    • 老年代的内存越来越大,并且每次Full GC后老年代没有内存被释放。
    • 老年代堆空间被占满的情况。

    内存泄漏的解决方式:一般就是根据垃圾回收前后情况对比,同时根据对象引用情况分析,辅助去查找泄漏点。

    堆栈溢出的情况,通常会抛出java.lang.StackOverflowError,一般就是递归调用没退出,或者循环调用导致


    调优步骤

    重点是调优的过程、方法和思路。内存调整、数据库连接调整、内存泄漏查找等。通过JMC录制JFR飞行记录

    1. 查看CPU的占用率
    2. 内存的分配和使用量
    3. 垃圾收集的执行频率、暂停时间、垃圾收集区域
    4. 文件I/O、套接字I/O,查看远程I/O阻塞时间

    一般信息,堆使用量、CPU总体占用率、GC暂停时间是非常重要的三个指标,对于Java应用而言,GC暂停时间是最值得关注的指标。

    在这里插入图片描述

    通过内存信息,我们可以清晰的看到垃圾收集器的类型,垃圾收集的暂停时间,包括最短暂停时间、平均暂停时间、最长暂停时间,以及更为重要的垃圾收集频率(垃圾收集的周期及STW时长)。

    在这里插入图片描述

    代码分析是Java性能分析重点,通过代码分析,我们可以清楚的知道系统运行时,哪些类及方法被高频率的调用。

    在这里插入图片描述

    热点方法,通过查看热点方法调用栈,我们可以清晰的了解到系统的主要计算资源消耗情况。

    在这里插入图片描述

    通过调用树,我们能以模块化的方式直观的看到系统运行状态。

    在这里插入图片描述

    通过线程概述报告,我们可以得知CPU占用率的分布(系统占用率、应用程序+JVM占用率)和活动线程数,对于CPU占用率而言,应用程序应该占用99%的计算资源,而活动线程数应该控制在合理范围内(具体看应用)。

    在这里插入图片描述

    热点线程一栏,详细列出了热点线程的数量及详情,通过详情,我们可以得知线程的执行情况。

    在这里插入图片描述

    线程争用是解决应用性能最为关键的部分,在应用上线初期,我们可以通过解决线程争用初步实现系统性能的巨大提升。上图中的争用为GC导致,具体是由于使用G1时,设置的GC预期暂停时间过短导致的。

    在这里插入图片描述

    IO作为系统的基础指标,IO过高会导致系统性能急剧下降,避免过度打印日志和生成大文件可以避免系统IO过高导致的性能问题。

    在这里插入图片描述


    通过VisualVM查询实时的虚拟机信息

    查看监视界面,可以看到cup运行情况、堆的使用情况、类的情况以及线程的动态情况。

    在这里插入图片描述

    查看线程,可以看到所有的线程的情况,是运行、休眠、等待、驻留、监视等情况。

    在这里插入图片描述

    也可以点击右上角Dump按钮,将线程的信息导出,其实就是执行的jstack命令

    在这里插入图片描述

    查看抽样器,抽样器可以对CPU、内存在一段时间内进行抽样,

    • CPU监控:查看热点方法和各个方法占用CPU时间及其比例。
    • 内存监控:每个线程分配内存。

    在这里插入图片描述

    抽样cpu

    在这里插入图片描述

    添加插件Visual GC,利用Visual GC分析虚拟机内存区域。

    • 内存大小分情况
    • 主要关注 GC Time长短及间隔
    • 查看是否old Gen,Eden是否存在持续上升

    在这里插入图片描述


    本文小结

    通过JMC录制JFR飞行记录和通过VisualVM监控实时的虚拟机信息,进行调整优化。

    针对性的去调整JVM内存、新生代、年代的空间大小、数据库连接池大小、MySQL最大连接数等。

    不断的分析和调整,直到找到合适的JVM参数配置,找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。

    展开全文
  • 一、说明 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。 命令的格式如下: jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数] 注意:使用的jdk版本是jdk8.   二、垃圾回收统计 ...
  • JVM调优总结.pdf

    2020-07-24 10:38:42
    这回添加的东西主要集中在基础的一些问题上,还有一些这两年思考的问题。这些问题可能平时我们不会刻 意去想,但是真正看清楚了,却发现还是大有裨益的:)希望对大家都有帮助~
  • JVM调优

    2020-10-16 13:06:38
    JVM调优目的 减少STW (Stop The Work),减少full gc的次数和缩短full gc的时间(增强jvm稳定性,减少重gc次数和缩短重gc时间) 一、 JVM调优参数简介 1、 JVM参数简介 -XX 参数被称为不稳定参数,之所以这么叫是因为...

    JVM调优目的
    减少STW (Stop The Work),减少full gc的次数和缩短full gc的时间(增强jvm稳定性,减少重gc次数和缩短重gc时间)

    一、 JVM调优参数简介

    1、 JVM参数简介

    -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。如果此类参数设置合理将大大提高JVM 的性能及稳定性。

    不稳定参数语法规则:

    1.布尔类型参数值
    -XX:+ '+'表示启用该选项
    -XX:- '-'表示关闭该选项

    2.数字类型参数值:
    -XX:= 给选项设置一个数字类型值,可跟随单位,例如:'m’或’M’表示兆字节;'k’或’K’千字节;'g’或’G’千兆字节。32K与32768是相同大小的。

    3.字符串类型参数值:
    -XX:= 给选项设置一个字符串类型值,通常用于指定一个文件、路径或一系列命令列表。

    例如:-XX:HeapDumpPath=./dump.core

    2、 JVM参数示例

    配置: -Xmx4g –Xms4g –Xmn1200m –Xss512k -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:PermSize=100m

    -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15

    解析:
    -Xmx4g:堆内存最大值为4GB。

    -Xms4g:初始化堆内存大小为4GB 。

    -Xmn1200m:设置年轻代大小为1200MB。增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

    -Xss512k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1MB,以前每个线程堆栈大小为256K。应根据应用线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

    -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

    -XX:SurvivorRatio=8:设置年轻代中Eden区与Survivor区的大小比值。设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10

    -XX:PermSize=100m:初始化永久代大小为100MB。

    -XX:MaxPermSize=256m:设置持久代大小为256MB。

    -XX:MaxTenuringThreshold=15:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

    二、 JVM调优目标

    1. 何时需要做jvm调优?

    什么情况下需要对jvm做调优?

    1. heap 内存(老年代)持续上涨达到设置的最大内存值;
    2. Full GC 次数频繁;
    3. GC 停顿时间过长(超过1秒);
    4. 应用出现OutOfMemory 等内存异常;
    5. 应用中有使用本地缓存且占用大量内存空间;
    6. 系统吞吐量与响应性能不高或下降。

    2. JVM调优原则

    JVM调优原则:
    1、多数的Java应用不需要在服务器上进行JVM优化;

    2、多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;

    3、在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);

    4、减少创建对象的数量;

    5、减少使用全局变量和大对象;

    6、JVM优化是到最后不得已才采用的手段;

    7、在实际使用中,分析GC情况优化代码比优化JVM参数更好;

    3. JVM调优目标

    JVM调优目标 :

    1. GC低停顿;

    2. GC低频率;

    3. 低内存占用;

    4. 高吞吐量;

    JVM调优量化目标(示例):

    1. Heap 内存使用率 <= 70%;

    2. Old generation内存使用率<= 70%;

    3. avgpause <= 1秒;

    4. Full gc 次数0 或 avg pause interval >= 24小时 ;

    注意:不同应用,其JVM调优量化目标是不一样的。

    三、 JVM调优经验

    1. JVM调优经验总结

    JVM调优的一般步骤为:
    第1步:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;

    第2步:确定JVM调优量化目标;

    第3步:确定JVM调优参数(根据历史JVM参数来调整);

    第4步:调优一台服务器,对比观察调优前后的差异;

    第5步:不断的分析和调整,直到找到合适的JVM参数配置;

    第6步:找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。

    2. JVM调优重要参数解析

    注意:不同应用,其JVM最佳稳定参数配置是不一样的。

    配置: -server

    -Xms12g -Xmx12g -XX:PermSize=500m -XX:MaxPermSize=1000m -Xmn2400m -XX:SurvivorRatio=1 -Xss512k -XX:MaxDirectMemorySize=1G

    -XX:+DisableExplicitGC -XX:CompileThreshold=8000 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

    -XX:+UseCompressedOops -XX:CMSInitiatingOccupancyFraction=60 -XX:ConcGCThreads=4

    -XX:MaxTenuringThreshold=10 -XX:ParallelGCThreads=8

    -XX:+ParallelRefProcEnabled -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled

    -XX:CMSMaxAbortablePrecleanTime=500 -XX:CMSFullGCsBeforeCompaction=4 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection

    -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/weblogic/gc/gc_$$.log

    重要参数(可调优)解析:

    -Xms12g:初始化堆内存大小为12GB。

    -Xmx12g:堆内存最大值为12GB 。

    -Xmn2400m:新生代大小为2400MB,包括 Eden区与2个Survivor区。

    -XX:SurvivorRatio=1:Eden区与一个Survivor区比值为1:1。

    -XX:MaxDirectMemorySize=1G:直接内存。报java.lang.OutOfMemoryError: Direct buffer memory 异常可以上调这个值。

    -XX:+DisableExplicitGC:禁止运行期显式地调用 System.gc() 来触发fulll GC。

                                           注意: Java RMI的定时GC触发机制可通过配置-Dsun.rmi.dgc.server.gcInterval=86400来控制触发的时间。
    

    -XX:CMSInitiatingOccupancyFraction=60:老年代内存回收阈值,默认值为68。

    -XX:ConcGCThreads=4:CMS垃圾回收器并行线程线,推荐值为CPU核心数。

    -XX:ParallelGCThreads=8:新生代并行收集器的线程数。

    -XX:MaxTenuringThreshold=10:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

    -XX:CMSFullGCsBeforeCompaction=4:指定进行多少次fullGC之后,进行tenured区 内存空间压缩。

    -XX:CMSMaxAbortablePrecleanTime=500:当abortable-preclean预清理阶段执行达到这个时间时就会结束。

    《JVM调优常见面试题》:

    展开全文
  • JVM调优实战.doc

    2020-06-04 15:45:48
    JVM调优实战
  • NULL 博文链接:https://lihongchao87.iteye.com/blog/1688576
  • jvm 调优建议文档

    2019-04-02 22:54:56
    jvm 调优建议文档
  • 常用的 JVM 调优的参数都有哪些? -Xms2g:初始化推大小为 2g; -Xmx2g:堆最大内存为 2g; -XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4; -XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2...

    常用的 JVM 调优的参数都有哪些?

    • -Xms2g:初始化推大小为 2g;
    • -Xmx2g:堆最大内存为 2g;
    • -XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;
    • -XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;
    • –XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;
    • -XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;
    • -XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合;
    • -XX:+PrintGC:开启打印 gc 信息;
    • -XX:+PrintGCDetails:打印 gc 详细信息。
    展开全文
  • jvm调优步骤

    2021-08-12 18:05:34
    jvm调优 JVM调优的一般步骤为: 第1步:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点; 第2步:确定JVM调优量化目标; 第3步:确定JVM调优参数(根据历史JVM参数来调整); 第4步:调优一台服务器,...

    jvm调优

    JVM调优的一般步骤为:

    第1步:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;
    第2步:确定JVM调优量化目标;
    第3步:确定JVM调优参数(根据历史JVM参数来调整);
    第4步:调优一台服务器,对比观察调优前后的差异;
    第5步:不断的分析和调整,直到找到合适的JVM参数配置;
    第6步:找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。

    -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。如果此类参数设置合理将大大提高JVM 的性能及稳定性
    -XX:+<option> '+'表示启用该选项
    -XX:-<option> '-'表示关闭该选项

    -Xmx12g 堆内存最大值为12GB 。
    -Xms建议与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
    -Xmn //官方推荐配置为整个堆的3/8
    -Xss 默认1m //减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
    -XX:NewRatio=4 设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
    -XX:SurvivorRatio=8:设置年轻代中Eden区与Survivor区的大小比值。设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
    -XX:MaxDirectMemorySize=1G:直接内存。报java.lang.OutOfMemoryError: Direct buffer memory 异常可以上调这个值
    -XX:ConcGCThreads=4:CMS垃圾回收器并行线程线,推荐值为CPU核心数。
    -XX:ParallelGCThreads=8:新生代并行收集器的线程数。

    展开全文
  • 文章目录一、场景介绍二、基于 JRE 环境运行 Docker 容器的 JVM 调优三、基于 JDK 环境运行 Docker 容器的 JVM 调优 一、场景介绍 在线上运行的应用程序,如果出现 OOM 等等 JVM 的异常,我们需要通过灾难现场来...
  • jvm调优案例

    千次阅读 2019-09-05 11:34:15
    JVM调优 JVM 收集器 默认使用串行收集器, 单个cpu时适用吞吐收集器(throughput collector):命令行参数:-XX:+UseParallelGC。在新生代使用并行清除收集策略,在旧生代和默认收集器相同。 适用:a、拥有2个以上...
  • JVM调优工具分享

    2018-12-10 16:24:13
    JVM调优工具分享
  • jvm调优视频

    2018-01-09 10:54:21
    深入jvm内核--原理,诊断与优化的优秀视频,需要深入jvm的同学可以下载来看一看
  • idea里Jvm调优

    2021-08-28 21:52:59
    快速掌握jvm调优!!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,805
精华内容 35,922
关键字:

jvm调优