JVM|生产环境某服务JVM虚拟机参数设置备忘

生产环境某服务JVM虚拟机参数设置备忘。

目录

01 使用的 GC 垃圾回收器:CMS

02 JVM 参数设置备忘

03 参数设置说明


01 使用的 GC 垃圾回收器:CMS

  • CMS全称 Concurrent Mark Sweep
  • 标记-清除算法的垃圾回收器
  • 使用场景:GC 过程短暂停,适合对时延要求较高的服务,用户线程不允许长时间的停顿。
  • 缺点:服务长时间运行,造成严重的内存碎片化。另外,算法实现比较复杂(如果也算缺点的话)
  • 实现机制:根据 GC 的触发机制分为:周期性Old GC(被动)和主动Old GC

02 JVM 参数设置备忘

(注:信息已脱敏)

"-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties",
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
"-Duser.timezone=GMT+08",
"-Xms3840m",
"-Xmx3840m",
"-XX:NewSize=1024m",
"-XX:MaxNewSize=1024m",
"-XX:MaxDirectMemorySize=256m",
"-XX:MetaspaceSize=128m",
"-XX:MaxMetaspaceSize=256m",
"-XX:+UseParNewGC",
"-XX:+UseCMSInitiatingOccupancyOnly",
"-XX:+UseGCLogFileRotation",
"-XX:NumberOfGCLogFiles=10",
"-XX:GCLogFileSize=1024M",
"-XX:+ExplicitGCInvokesConcurrent",
"-XX:-UseGCOverheadLimit",
"-XX:+UseConcMarkSweepGC",
"-XX:CMSInitiatingOccupancyFraction=65",
"-XX:CMSFullGCsBeforeCompaction=2",
"-XX:+PrintGCDetails",
"-XX:+PrintGCTimeStamps",
"-XX:+PrintGCDateStamps",
"-javaagent:/usr/local/apm_agent/apm.agent.bootstrap.jar",
"-Xloggc:/data/logs/xxx.xxx_gc.log",
"-Dapm.applicationName=xxx",
"-Dapm.agentId=xxxip-xxxport",
"-Dapm.env=product",
"-Djava.endorsed.dirs=/usr/local/tomcat/endorsed",
"-Dcatalina.base=/usr/local/tomcat",
"-Dcatalina.home=/usr/local/tomcat",
"-Djava.io.tmpdir=/usr/local/tomcat/temp"

03 参数设置说明


//设置初始 Java™ 堆大小。最小大小为 1 MB。
"-Xms3840m",

//-Xmx 选项用于设置最大 Java™ 堆大小。
"-Xmx3840m",

//设置年轻代初始值
"-XX:NewSize=1024m",

//设置年轻代最大值
"-XX:MaxNewSize=1024m",

//直接内存.指定DirectMemory容量,若未指定,则默认与Java堆最大值一样。
//每个进程能使用的内存大小受操作系统的限制,在堆等的内存大小不变时,配置的栈内存越小,能开启的线程数越多。
"-XX:MaxDirectMemorySize=256m",

//【方法区】初始空间大小,达到该值就会触发垃圾收集器进行类型卸载。
// 同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放
// 了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
"-XX:MetaspaceSize=128m",

//【方法区】最大空间,默认没有限制。
"-XX:MaxMetaspaceSize=256m",

/*
如果是布尔类型的选项,它的格式为-XX:+flag或者-XX:-flag,分别表示开启和关闭该选项。
设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。
*/
"-XX:+UseParNewGC",

/*
指定HotSpot VM总是使用-XX:CMSInitiatingOccupancyFraction的值作为old的空间使用率限制来启动CMS垃圾回收。
如果没有使用-XX:+UseCMSInitiatingOccupancyOnly,那么HotSpot VM只是利用这个值来启动第一次CMS垃圾回收,
后面都是使用HotSpot VM自动计算出来的值。
*/
"-XX:+UseCMSInitiatingOccupancyOnly",

//启用GC日志文件的自动转储
"-XX:+UseGCLogFileRotation",

//GC日志文件的循环数目
"-XX:NumberOfGCLogFiles=10",

//控制GC日志文件的大小
"-XX:GCLogFileSize=1024M",

//如果在代码里面显式调用System.gc(),那么它还是会执行Full //GC从而导致用户线程被暂停。采用这个选项使得显式触发GC的时候还是使用CMS收集器。
"-XX:+ExplicitGCInvokesConcurrent",

//默认启用。限制GC的运行时间。如果GC耗时过长,就抛OOM。这里是对这个参数进行了关闭。
"-XX:-UseGCOverheadLimit",

//启用CMS低停顿垃圾收集器,减少FGC的暂停时间。
"-XX:+UseConcMarkSweepGC",

/*
指定了CMS垃圾回收时old代的空间占用率该是什么值.
希望old代占用率是65%的时候,启动CMS垃圾回收,你可以设置-XX:CMSInitiatingOccupancyFraction=65.
*/
"-XX:CMSInitiatingOccupancyFraction=65",

//设置多少次full gc后进行内存压缩,由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",
//使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理。
"-XX:CMSFullGCsBeforeCompaction=2",

//打印gc详细信息
"-XX:+PrintGCDetails",

//记录的是jvm启动时间为起点的相对时间
"-XX:+PrintGCTimeStamps",

//记录的是系统时间
"-XX:+PrintGCDateStamps",

//在加载java文件之前做拦截把字节码做修改
"-javaagent:/usr/local/apm_agent/apm.agent.bootstrap.jar",

//日志文件的输出路径
"-Xloggc:/data/logs/xxx.xxx_gc.log",

//apm的参数
"-Dapm.applicationName=xxx",
"-Dapm.agentId=xxxip-xxxport",
"-Dapm.env=product",

//-D 设置系统参数
"-Djava.endorsed.dirs=/usr/local/tomcat/endorsed",
"-Dcatalina.base=/usr/local/tomcat",
"-Dcatalina.home=/usr/local/tomcat",
"-Djava.io.tmpdir=/usr/local/tomcat/temp"
"-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties",
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
"-Duser.timezone=GMT+08",

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不甩锅的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值