北海建设网站,沈阳做网站多少钱,怎么样给一个网站做自然排名,跨境电商免费平台有哪些遇到以下情况#xff0c;就需要考虑进行JVM调优了#xff1a; Heap内存#xff08;老年代#xff09;持续上涨达到设置的最大内存值#xff1b; Full GC 次数频繁#xff1b; GC 停顿时间过长#xff08;超过1秒#xff09;#xff1b; 应用出现OutOfMemory 等内存异常…遇到以下情况就需要考虑进行JVM调优了 Heap内存老年代持续上涨达到设置的最大内存值 Full GC 次数频繁 GC 停顿时间过长超过1秒 应用出现OutOfMemory 等内存异常 应用中有使用本地缓存且占用大量内存空间 系统吞吐量与响应性能不高或下降。 JVM调优的基本原则
JVM调优是一个手段但并不一定所有问题都可以通过JVM进行调优解决因此在进行JVM调优时我们要遵循一些原则 大多数的Java应用不需要进行JVM优化 大多数导致GC问题的原因是代码层面的问题导致的代码层面 上线之前应先考虑将机器的JVM参数设置到最优 减少创建对象的数量代码层面 减少使用全局变量和大对象代码层面 优先架构调优和代码调优JVM优化是不得已的手段代码、架构层面 分析GC情况优化代码比优化JVM参数更好代码层面 通过以上原则我们发现其实最有效的优化手段是架构和代码层面的优化而JVM优化则是最后不得已的手段也可以说是对服务器配置的最后一次“压榨”。 JVM调优目标
调优的最终目的都是为了令应用程序使用最小的硬件消耗来承载更大的吞吐。jvm调优主要是针对垃圾收集器的收集性能优化令运行在虚拟机上的应用能够使用更少的内存以及延迟获取更大的吞吐量。 延迟GC低停顿和GC低频率
低内存占用
高吞吐量;
其中任何一个属性性能的提高几乎都是以牺牲其他属性性能的损为代价的不可兼得。具体根据在业务中的重要性确定。 JVM调优量化目标
下面展示了一些JVM调优的量化目标参考实例 Heap 内存使用率 70%; Old generation内存使用率 70%; avgpause 1秒; Full gc 次数0 或 avg pause interval 24小时 ; 注意不同应用的JVM调优量化目标是不一样的。 JVM调优的步骤
一般情况下JVM调优可通过以下步骤进行 分析GC日志及dump文件判断是否需要优化确定瓶颈问题点 确定JVM调优量化目标 确定JVM调优参数根据历史JVM参数来调整 依次调优内存、延迟、吞吐量等指标 对比观察调优前后的差异 不断的分析和调整直到找到合适的JVM参数配置 找到最合适的参数将这些参数应用到所有服务器并进行后续跟踪。 以上操作步骤中某些步骤是需要多次不断迭代完成的。一般是从满足程序的内存使用需求开始的之后是时间延迟的要求最后才是吞吐量的要求要基于这个步骤来不断优化每一个步骤都是进行下一步的基础不可逆行之。 JVM参数
JVM调优最重要的工具就是JVM参数了。先来了解一下JVM参数相关内容。 -XX 参数被称为不稳定参数此类参数的设置很容易引起JVM 性能上的差异使JVM存在极大的不稳定性。如果此类参数设置合理将大大提高JVM的性能及稳定性。 不稳定参数语法规则包含以下内容。 布尔类型参数值 -XX:option 表示启用该选项 -XX:-option -表示关闭该选项 数字类型参数值 -XX:optionnumber给选项设置一个数字类型值可跟随单位例如m或M表示兆字节;k或K千字节;g或G千兆字节。32K与32768是相同大小的。
字符串类型参数值 -XX:optionstring给选项设置一个字符串类型值通常用于指定一个文件、路径或一系列命令列表。例如-XX:HeapDumpPath./dump.core
JVM参数解析及调优
比如以下参数示例 -Xmx4g –Xms4g –Xmn1200m –Xss512k -XX:NewRatio4 -XX:SurvivorRatio8 -XX:PermSize100m -XX:MaxPermSize256m -XX:MaxTenuringThreshold15 上面为Java7及以前版本的示例在Java8中永久代的参数-XX:PermSize和-XXMaxPermSize已经失效。这在前面章节中已经讲到。 参数解析 -Xmx4g堆内存最大值为4GB。 -Xms4g初始化堆内存大小为4GB。 -Xmn1200m设置年轻代大小为1200MB。增大年轻代后将会减小年老代大小。此值对系统性能影响较大Sun官方推荐配置为整个堆的3/8。 -Xss512k设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1MB以前每个线程堆栈大小为256K。应根据应用线程所需内存大小进行调整。在相同物理内存下减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的不能无限生成经验值在3000~5000左右。 -XX:NewRatio4设置年轻代包括Eden和两个Survivor区与年老代的比值除去持久代。设置为4则年轻代与年老代所占比值为14年轻代占整个堆栈的1/5 -XX:SurvivorRatio8设置年轻代中Eden区与Survivor区的大小比值。设置为8则两个Survivor区与一个Eden区的比值为2:8一个Survivor区占整个年轻代的1/10 -XX:PermSize100m初始化永久代大小为100MB。 -XX:MaxPermSize256m设置持久代大小为256MB。 -XX:MaxTenuringThreshold15设置垃圾最大年龄。如果设置为0的话则年轻代对象不经过Survivor区直接进入年老代。对于年老代比较多的应用可以提高效率。如果将此值设置为一个较大值则年轻代对象会在Survivor区进行多次复制这样可以增加对象再年轻代的存活时间增加在年轻代即被回收的概论。