iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JVM中生产环境参数实例及分析
  • 824
分享到

JVM中生产环境参数实例及分析

2023-06-17 11:06:33 824人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关JVM中生产环境参数实例及分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java application项目(非WEB项目)改进前:-Xms128m 

今天就跟大家聊聊有关JVM中生产环境参数实例及分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

java application项目(非WEB项目)

改进前:

-Xms128m  -Xmx128m  -XX:NewSize=64m  -XX:PermSize=64m  -XX:+UseConcMarkSweepGC  -XX:CMSInitiatinGoccupancyFraction=78 -XX:ThreadStackSize=128-Xloggc:logs/gc.log  -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.server.exceptionTrace=true

问题:

◆  permsize 设置较小,很容易达到报警范围(0.8)

◆ 没有设置MaxPermSize,堆增长会带来额外压力。

◆ NewSize较大,old gen 剩余空间64m,一方面可能会带来old区容易增长到报警范围(监控数据显示oldgenused长期在50m左右,接近78%,容易出现full gc),另一方面也存在promontion fail风险。

改进后:

-Xms128m  -Xmx128m  -Xmn24m  -XX:PermSize=80m  -XX:MaxPermSize=80m  -Xss256k-XX:SurvivorRatio=1 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC  -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSCompactAtFullCollection  -XX:+CMSParallelRemarkEnabled  -XX:CMSFullGCsBeforeCompaction=2 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClasshistogram  -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintHeapAtGC  -Xloggc:logs/gc.log  -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.server.exceptionTrace=true

修改点:

◆ PermSize与MaxPermSize都设置为80,一方面避免non heap warn(报警阀值0.8 非对内存一般占用到60M以内),一方面避免堆伸缩带来的压力

◆ 通过设置Xmn=24M及SurvivorRatio=1 使得Eden区=from space=to space=8M,降低了Eden区大小,降低YGC的时间(降低到3-4ms左右),同时通过设MaxTenuringThreshold=20,使得old gen的增长很缓慢。带来的问题是YGC的次数明显提高了很多。

◆ 其他参数优化 修改后带来的好处见JVM参数设置

再次改进后

-Xms128m  -Xmx128m  -Xmn36m  -XX:PermSize=80m  -XX:MaxPermSize=80m  -Xss256k  -XX:SurvivorRatio=1 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC  -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection  -XX:+CMSParallelRemarkEnabled  -XX:CMSFullGCsBeforeCompaction=2 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintHeapAtGC  -Xloggc:logs/gc.log  -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.server.exceptionTrace=true

修改点:

在上面的基础上调整Xmn大小到36M,设置CMSInitiatingOccupancyFraction=73。

Dden区与Survivor区大小都增加到12M,通过CMSInitiatingOccupancyFraction计算公式,计算得出value为73是,可以避免promotion faild问题,同时满足堆内存监控报警值在80%:内存大小128M*80%=102.4M 102.4M-36M=66.4M(老生代达到此值报警) 老生代达到67.15M(92M*0.73)将发生Full GC,所以在老生代大小达到66.4M时也就是WARN报警时将很有可能出现Full GC。

增大了Eden和Survivor区的值,会减小YGC的次数,但由于空间变大理论上也会相应的增加YGC的时间,不过由于新生代本身就很小(才36M)这点儿变化可以忽略掉。实际的监控值显示YGC的时间在4-5ms之间。是可以接受范围。

SurvivorRatio 这个值还得在仔细考虑下,有待优化中

网上某个牛人的配置 :每天几百万pv一点问题都没有,网站没有停顿

$JAVA_ARGS  .="  -Dresin.home=$SERVER_ROOT  -server  -Xms6000M  -Xmx6000M  -Xmn500M  -XX:PermSize=500M  -XX:MaxPermSize=500M  -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc  -XX:+DisableExplicitGC  -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC  -XX:+UseCMSCompactAtFullCollection  -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled-XX:  -CMSParallelRemarkEnabled  -XX:CMSInitiatingOccupancyFraction=90 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintHeapAtGC  -Xloggc:log/gc.log  ";

说明一下, -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0就是去掉了救助空间;

-Xnoclassgc禁用类垃圾回收,性能会高一点;

-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能;

-XX:+UseParNewGC,对年轻代采用多线程并行回收,这样收得快;

带CMS参数的都是和并发回收相关的,不明白的可以上网搜索;

CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是500,那么Xmx-Xmn是5500兆,也就是年老代有5500兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还剩10%的空间是5500*10%=550兆,所以即使Xmn(也就是年轻代共500兆)里所有对象都搬到年老代里,550兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的promotion failed;

SoftRefLRUPolicyMSPerMB这个参数我认为可能有点用,官方解释是softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap,我觉得没必要等1秒;

-Xmx4000M  -Xms4000M  -Xmn600M  -XX:PermSize=500M  -XX:MaxPermSize=500M  -Xss256K  -XX:+DisableExplicitGC  -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC  -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled  -XX:+UseCMSCompactAtFullCollection  -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled  -XX:LargePageSizeInBytes=128M  -XX:+UseFastAccessORMethods  -XX:+UseCMSInitiatingOccupancyOnly  -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintHeapAtGC  -Xloggc:log/gc.log

改进方案:

上面方法不太好,因为没有用到救助空间,所以年老代容易满,CMS执行会比较频繁。我改善了一下,还是用救助空间,但是把救助空间加大,这样也不会有promotion failed。
具体操作上,32位linux和64位Linux好像不一样,64位系统似乎只要配置MaxTenuringThreshold参数,CMS还是有暂停。为了解决暂停问题和promotion failed问题,***我设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold去掉,这样即没有暂停又不会有promotoin failed,而且更重要的是,年老代和***代上升非常慢(因为好多对象到不了年老代就被回收了),所以CMS执行频率非常低,好几个小时才执行一次,这样,服务器都不用重启了。

某网友:

$JAVA_ARGS  .="  -Dresin.home=$SERVER_ROOT  -server  -Xmx3000M  -Xms3000M  -Xmn600M  -XX:PermSize=500M  -XX:MaxPermSize=500M  -Xss256K  -XX:+DisableExplicitGC  -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC  -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled  -XX:+UseCMSCompactAtFullCollection  -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled  -XX:LargePageSizeInBytes=128M  -XX:+UseFastAccessorMethods  -XX:+UseCMSInitiatingOccupancyOnly  -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintHeapAtGC  -Xloggc:log/gc.log";

64位jdk参考设置,年老代涨得很慢,CMS执行频率变小,CMS没有停滞,也不会有promotion failed问题,内存回收得很干净。

看完上述内容,你们对JVM中生产环境参数实例及分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: JVM中生产环境参数实例及分析

本文链接: https://www.lsjlt.com/news/288619.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JVM中生产环境参数实例及分析
    今天就跟大家聊聊有关JVM中生产环境参数实例及分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java application项目(非web项目)改进前:-Xms128m ...
    99+
    2023-06-17
  • webpack开发环境和生产环境的示例分析
    这篇文章主要为大家展示了“webpack开发环境和生产环境的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“webpack开发环境和生产环境的示例分析”这...
    99+
    2024-04-02
  • MySQL中参数sql_safe_updates在生产环境怎么用
    这篇文章主要介绍了MySQL中参数sql_safe_updates在生产环境怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前...
    99+
    2024-04-02
  • Vue前端生产环境发布配置的示例分析
    小编给大家分享一下Vue前端生产环境发布配置的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一,资源文件发布配置一般项目...
    99+
    2024-04-02
  • JVM参数设置的示例分析
    这篇文章主要介绍了JVM参数设置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的...
    99+
    2023-06-02
  • Oracle GoldenGate配置参数生产端分析
    这篇文章主要介绍“Oracle GoldenGate配置参数生产端分析”,在日常操作中,相信很多人在Oracle GoldenGate配置参数生产端分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
  • 如何进行JVM参数设置及分析
    本篇文章给大家分享的是有关如何进行JVM参数设置及分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选...
    99+
    2023-06-17
  • Ramda.js及传参实例分析
    这篇“Ramda.js及传参实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Ramda.js及传参实例分析”文章吧。F...
    99+
    2023-07-02
  • 深入浅析JVM中的参数分配
    深入浅析JVM中的参数分配?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、堆参数设置-XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志-XX:...
    99+
    2023-05-31
    jvm
  • vbs如何实现循环产生的参数传递
    小编给大家分享一下vbs如何实现循环产生的参数传递,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Set objFSO = Creat...
    99+
    2023-06-08
  • Spring Boot jar启动时设置环境参数的示例分析
    这篇文章主要介绍Spring Boot jar启动时设置环境参数的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Boot jar 启动时设置环境参数1 摘要通常在使用 Spring Boot 开...
    99+
    2023-06-15
  • 【jvm系列-13】jvm性能调优篇---参数设置以及日志分析
    JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的...
    99+
    2023-08-30
    jvm java jvm参数设置 jvm性能调优 jvm日志分析
  • C++函数参数实例分析
    这篇文章主要介绍了C++函数参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数参数实例分析文章都会有所收获,下面我们一起来看看吧。一、函数参数的默认值C++ 中可以在函数声明时为参数提供一个默...
    99+
    2023-06-30
  • java中生产者和消费者问题实例分析
    这篇“java中生产者和消费者问题实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java中生产者和消费者问题实例分析...
    99+
    2023-06-29
  • Python函数参数实例分析
    本文小编为大家详细介绍“Python函数参数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python函数参数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.函数参数# 1.位置参数...
    99+
    2023-06-28
  • JavaScript中执行环境及作用域链的示例分析
    这篇文章给大家分享的是有关JavaScript中执行环境及作用域链的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、执行环境:每个执行环境...
    99+
    2024-04-02
  • JS中的参数传递实例分析
    这篇文章主要介绍“JS中的参数传递实例分析”,在日常操作中,相信很多人在JS中的参数传递实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS中的参数传递实例分析”的疑惑...
    99+
    2024-04-02
  • Node.js中沙箱环境的示例分析
    这篇文章给大家分享的是有关Node.js中沙箱环境的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。node官方文档里提到node的vm模块可以用来做沙箱环境执行代码,对代...
    99+
    2024-04-02
  • jquery中ajax方法的参数属性及作用实例分析
    这篇“jquery中ajax方法的参数属性及作用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • linux中kill命令的参数以及示例分析
    linux中kill命令的参数以及示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。   kill号令用于终止指定的过程(terminate a pro...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作