JVM 常用参数

举报
南慧荣 发表于 2020/08/05 19:51:45 2020/08/05
【摘要】 介绍JVM常用参数

1.垃圾回收期参数选择

  • UseSerialGC 开启此参数使用serial&serial old搜集器(client模式默认值,JDK1.3引入)

    -Xms 4m -Xmx 64m

  • UseParallelGC 吞吐量优先收集器,开启此参数使用parallel scavenge&parallel old搜集器(server模式默认值)吞吐量较高

    -Xms 物理内存的1/64(上限1G)、-Xmx 物理内存的1/4(上限1G)
    提供自适应堆调整功能

  • UseParNewGC 开启此参数使用ParNew&serial old搜集器(不推荐,老版本的并行,年老代不并行,JDK1.4引入)

  • UseConcMarkSweepGC 并发低中断收集器,开启此参数使用ParNew & CMS(serial old为替补)搜集器(JDK1.4引入)

    会有并发模式失败
    会自动开启-XX:+UseParNewGC
    尽量靠minor gc进行垃圾回收,压缩式垃圾回收很慢
    如果年老代没有足够的空间处理新生代空间的对象晋升,只会在年老代触发一次stop-the-world的压缩式GC(与full GC有区别,full GC发生在新生代和年老代),调优主要是避免压缩式GC
    从并行切换到并发,年老代的空间要增加0.2-0.3

  • UseParallelOldGC:开启此参数在年老代使用parallel old搜集器(该参数在JDK1.5之后已无用)

  • -XX:+UseG1GC 打开G1收集器

  • -XX:MaxGCPauseMillis=50 一次GC的暂停时间尽量保持在50ms内

  • -XX:GCPauseIntervaMillis=200 两次GC的时间间隔在200ms以上

  • -XX:+PrintCompilation 打开编译日志

2.JVM内存参数

  • Xms java heap 初始值(默认物理内存的1/64)

  • Xmx java heap 最大值(默认物理内存的1/4)

  • Xmn 新生代大小

  • Xss 线程栈大小

  • PermSize 永久代初始值(默认物理内存的1/64)

  • MaxPermSize 永久代最大值(默认物理内存的1/4)

  • NewRatio 新生代与老年代的比列(3 新生代占1/4)

  • SurvivorRatio 新生代Eden区和survivor比列(默认为8), Eden占0.8

3.垃圾回收期通用性能参数

  • PretenureSizeThreshold 晋升年老代的对象大小, 默认为0

  • MaxTenuringThreshold 晋升为年老代的最大年龄(默认15经过15次普通gc进入年老代),

  • DisableExplicitGC 禁用system.gc

4.并行垃圾回收器性能参数parNew

  • -XX:ParallelGCThreads 回收时开启的线程数,默认与CPU个数相等

  • Parallel scavenge(优先满足最大停顿时间的目标,次之是吞吐量,最后才是新生代区域的最小值)

  • GCTimeRatio 设置系统的吞吐量。比如设为99,则GC时间比为1/1+99=1%,也就是要求吞吐量为99%。若无法满足会缩小新生代大小。

  • MaxGCPauseMillis:设置垃圾回收的最大停顿时间。若无法满足设置值,则会优先缩小新生代大小,仍无法满足的话则会牺牲吞吐量。

  • -XX:-UseAdaptiveSizePolicy 关闭自适应堆调整

  • -XX:ScavengeBeforeFullGC 在Full GC做一次MinorGC 5.并发垃圾回收期参数

    增加新生代大小以降低MinorGC的频率;增加年老代的大小以降低CMS的频率和内存碎片化问题;调节Eden和Survivor区域优化对象老化;进一步优化CMS的启动条件。

  • -XX:ParallelGCThreads= 控制重新标记使用的线程数

  • -XX:CMSIncrementalMode 增量模式

  • -XX:CMSIncrementalPacing 配合增量模式, 根据应用程序的行为自动调整每次执行垃圾回收任务的幅度

  • -XX:CMSInitiatingOccupancyFraction 触发第一次GC的CMS收集器的年老代内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集。

  • -XX:UseCMSInitiatingOccupancyOnly 表示当年老代内存达到该比例时触发GC,不应把该值设置低于年老代的活跃比例

  • -XX:UseCMSCompactAtFullCollection:这个前面已经提过,用于在每一次CMS收集器清理垃圾后送一次内存整理。

  • -XX:CMSFullGCsBeforeCompaction:设置在几次CMS垃圾收集后,触发一次内存整理。

  • -XX:+CMSScavengeBeforeRemark 执行CMS重新标记之前进行MinorGC 6.打印GC日志

    安全点:所有Java应用线程被阻塞,执行本地代码的线程被禁止返回JVM执行Java代码,此时所有的Java线程被显式阻塞并且不能修改Java堆

  • verbose:gc

  • -XX:+PrintGCDetails

  • -XX:+PrintGCDateStamps

  • -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime 报告应用在安全点之间的运行时间、阻塞java线程的时间

  • -XX:+PrintSafepointStatistics 将垃圾回收的安全点与其他安全点分开

  • -Xloggc:

7.通用参数

  • -client/-server 决定加载那个JIT编译器

  • -d64 加载64位VM

  • -XX:UseCompressedOops 开启压缩指针特性(-Xmx不超过32GB才可以使用)

  • -Xms heap的初始大小

  • -Xmx Heap的最大阈值

    在注重延时或者吞吐量时,一般将-Xms与-Xmx设为一样

  • 新生代参数

    -XX:NewSize 新生代初始化大小
    -XX:MaxNewSize 新生代的最大阈值
    -XX:NewRatio 新生代和年老代的比列(3表示1:3,新生代占1/4)
    -Xmn 将新生代的最小和最大设为相同值(只有-Xms和-Xmx一样时才使用该参数)

  • 年老代的大小按照新生代的大小隐式设定

  • 永久区参数

    -XX:MaxPermSize
    -XX:PermSize

  • Survivor调优

    -XX:MaxTenuringThreshold 设置最大晋升年老代阈值
    -XX:PrintTenuringDistribution 监控对象年龄分布
    -XX:InitialSurvivorRatio 与ParallelGC配合使用(size = -Xmn/(_ + 2))
    -XX:SurvivorRatio 单块Survivor与Eden的比例
    -XX:TargetSurvivorRatio MinorGC 后Survivor被占用的最大比例,默认0.5
    观察到新的晋升阈值持续<最大晋升阈值,或者Survivor空间小于总的存活对象都表明Survivor空间过小

  • 其他参数

    -XX:UnlockDiagnosticVMOptions -XX:PrintINterpreter查看内存生成的模板表(包含字节码对应的机器码)
    -XX:UseBiasedLocking 允许线程使用偏向锁
    -XX:ErrorFile 设置错误日志文件的路径名
    -XX:+HeapDumpOnOutOfMemory 当出现内存溢出时生成堆的信息
    -XX:HeapDump-Path= 指定堆快照的存放位置
    -XX:PrintCommandLineFlags 打印JVM默认的优化值
    -XX:PrintCompilation 监控JIT编译器
    DisableExplicitGC 禁用system.gc
    -XX:+PrintCompilation 有输出说明JIT编译器的工作还没结束
    8.参数通用法则

  • java heap 设置为年老代稳定(full GC 后)时的3-4倍

  • 永久代的设置为永久代稳定时的1.2-1.5倍

  • 新生代应该为年老代稳定时的1-1.5倍

  • 年老代不低于活跃时的1.5倍

  • 新生代不低于heap的0.1


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。