-XX:NewRatio

新生代(Eden + 2*S)与老年代(不包括永久区)的比值;要求比较的搞得吞吐量(避免较多的fullGC)
4 表示新生代 :老年代 = 1:4 ,意思是老年代占 4/5

-XX:SurvivorRatio

2个Survivor区和Eden区的比值
8 表示 两个Survivor : Eden = 2: 8 ,每个Survivor占 1/10

主要讲解如何为Web服务端程序设置合适的JVM参数。尽管不一定适合所有的案例,但是最好的GC算法是Concurrent Mark Sweep(CMS垃圾回收),特别是对于Web服务端程序。因为低延迟是非常重要的。当然,在使用CMS时,由于新生代空间(New Area)的分配,可能发生较长时间的stop-the-world现象,不过调整新生代空间的大小或者它和整个堆空间的比例可能解决这个问题。

指定新生代空间的大小和指定整个对堆内存的大小同样重要。你最好使用–XX:NewRatio来指定新生代和整个堆的大小比例,或者直接用–XX:NewSize来指定所需的新生代空间。这个配置是非常必要的,因为大部分对象都不会存活很久。在Web程序中,除了缓存数据,其他多数对象都只在HttpRequestHttpResponse期间创建。这个时间几乎不会超过1秒,表示这些对象的存活时间也不会超过1秒。如果新生代空间不够大,对象会被转移到老年代空间,以便腾出地方给新对象使用。老年代空间(Old Area)垃圾回收的代价是比新生代空间大的多的,因此很需要设置一个充足的新生代空间。

然而,当新生代空间的大小超过一个特定的水平,程序的响应能力会被降低。因为新生代空间的垃圾回收过程,基本上是将数据从一个Survivor Area复制到另外一个(From Space和To Space)。另外,stop-the-world的现象在新生代空间和老年代空间执行垃圾回收时都会发生。如果新生代空间变大,那么Survivor Area的空间也会更大,于是每次复制的数据就更多。基于这样一种特性,我们应该通过指定不同操作系统中HotSpot JVM的NewRatio参数来分配合适大小的新生代空间。

表2:不同操作系统和配置下NewRatio的默认值

操作系统及参数 默认-XX:NewRatio
Sparc -server 2
Sparc -client 8
x86 -server 8
x86 -client 12

如果设置了NewRatio,那么整个堆空间的1/(NewRatio +1)就是新生代空间的大小。上表可以看出Sparc -server的NewRatio默认值很小,因为相比x86的操作系统,Sparc以前更多用于高端应用,这个值就是为它们设置的。但现在x86操作系统的性能有很大提升,使用它们作为服务器已经很普遍了。因此指定NewRatio为2或者3是更好的选择,就和Sparc -server上的配置一样。

另外,你还可以通过指定NewSizeMaxNewSize来代替NewRatio。那么新生代空间创建时的大小就是指定的NewSize,随后可以一直增长到MaxNewSize的值。Eden(新创建对象存放的区域)和Survivor Area两个区域会随比例增加。就和你为-Xms(译者注:原文是-Xs,应该是笔误)和-Xmx设置相同的值一样,将MaxSize和 MaxNewSize设置为相同的也是一个好选择。

如果同时指定了NewRatio和NewSize,你应该使用更大的那个。于是,当堆空间被创建时,你可以用过下面的表达式计算初始新生代空间的大小:

1

min(MaxNewSize, max(NewSize, heap/(NewRatio+1)))

无论如何,仅通过一次尝试就找到合适的堆空间和新生代空间大小是不可能的。根据我在NHN运行Web服务器的经验,建议使用下面的JVM参数来运行Java程序。监控在这些参数的条件下程序的性能表现之后,你就能够选择更合适的GC算法或者配置。

表3:推荐的JVM参数

类型 参数
运行模式 -sever
整个堆内存大小 为-Xms和-Xmx设置相同的值。
新生代空间大小 -XX:NewRatio: 2到4. -XX:NewSize=? –XX:MaxNewSize=?. 使用NewSize代替NewRatio也是可以的。
持久代空间大小 -XX:PermSize=256m -XX:MaxPermSize=256m. 设置一个在运行中不会出现问题的值即可,这个参数不影响性能。
GC日志 -Xloggc:$CATALINA_BASE/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps. 记录GC日志并不会特别地影响Java程序性能,推荐你尽可能记录日志。
GC算法 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75. 一般来说推荐使用这些配置,但是根据程序不同的特性,其他的也有可能更好。
发生OOM时创建堆内存转储文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs
发生OOM后的操作 -XX:OnOutOfMemoryError=$CATALINA_HOME/bin/stop.sh 或 -XX:OnOutOfMemoryError=$CATALINA_HOME/bin/restart.sh. 记录内存转储文件后,为了管理的需要执行一个合适的操作。

java 调优参数 newRatio, survivorRatio相关推荐

  1. java调优方法,jvm监控工具

    graph LR A-->B 性能概述 程序性能表现形式 执行速度:程序响应速度,总耗时是否足够短 内存分配:内存分配是否合理,是否过多消耗内存或者存在泄漏 启动时间:程序运行到可以正常处理业务 ...

  2. JVM优化系列-详解常用的虚拟机调优参数

    导语   需要对虚拟机进行诊断,首先需要了解如何进行虚拟机的配合和跟踪,这里就来说说有那些虚拟机配置参数,通过它们来对虚拟机进行跟踪和配置. 文章目录 虚拟机跟踪调试参数 如何读懂虚拟机日志 GC基本 ...

  3. JVM-常用内存调优参数总结

    一.内存调整参数 -Xmx2g 设置堆内存最大值为2g -Xmx512m 设置堆内存最大值为512m -Xms1g 设置堆内存最小值1g(ps:-Xms和-Xmx实际上是 -XX:InitialHea ...

  4. 面试官:你会哪些JVM调优参数?

    关注公众号"Java后端技术全栈" 回复"000"获取程序员必备电子书 <Java 面试辅导>来啦!田哥和你面对面,一对一 规划如何准备面试.模拟真 ...

  5. 美团面试:熟悉哪些JVM调优参数,幸好我准备过!

    关注公众号"Java后端技术全栈" 回复"000"获取程序员必备电子书 大家好,我是田维常,江湖人称老田.田哥.田神,今天来和大家分享JVM调优参数. 之前,我 ...

  6. JVM常用调优参数 ——JVM篇

    JVM常用性能调优参数详解 ​ 在学习完整个JVM内容后,其实目标不仅是学习了解整个JVM的基础知识,而是为了进行JVM性能调优做准备,所以以下的内容就是来说说JVM性能调优的知识. 一.性能调优 ​ ...

  7. 转 jdk8 jvm调优参数配置

    转载 jdk8 jvm调优参数配置_feiying00544的博客-CSDN博客_jdk8 jvm参数 1.由于jdk8开始,没有了永久区的概念,所以在jvm参数配置上不再需要 -XX:PermSiz ...

  8. 关于JVM调优的工具及JVM 常见调优参数

    六个命令行排查工具 我们一般使用 JDK 自带的 6 个命令行工具来排查JVM.它们分别是:jps.jstat.jinfo.jmap.jhat 和 jstack,它们都位于 JDK 的 bin 目录下 ...

  9. JVM调优参数与常用工具

    常用的JVM调优参数 -Xms:设置初始堆大小 -Xmx:设置最大堆大小 -Xmn:设置年轻代的大小 -Xss:设置每个线程可使用的内存大小,即栈的大小.在相同物理内存下,减小这个值能生成更多的线程, ...

最新文章

  1. 【Spark】Spark基础练习题(一)
  2. 首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持
  3. 漫画 | TCP,一个悲伤的故事
  4. 可以直接考信息系统项目管理师吗
  5. EntityFramwork(1) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542
  6. 计算机的硬盘 内存在哪查到,电脑硬盘内存怎么查看
  7. python 并列条形图_python – 如何绘制具有相同X坐标并排的条形图
  8. 关于Xshell的使用和网络攻防原理
  9. Chrome浏览器的跨域设置----包含新老版本两种设置
  10. 【AiLearning】test2:搭建Shallow Netural Network
  11. PS 2019 Mac版 自学入门系列(五)——调配冷色与暖色
  12. 手势操作实用教程 | 实现「滑动清除」效果
  13. 网络知识-03 数据链路层-以太网
  14. 快速扫盲 | 霍尔传感器的工作原理
  15. 不知道为什么额头上老是长痘痘?
  16. 微信小程序奶茶店在线点单管理系统
  17. 软件开发过程--极限编程(XP)
  18. Android之八滑屏的代码实现
  19. 安卓系统刷机怎么刷机_通吃两大手机系统,一代刷机之王HTC HD2能否再战安卓9.0?...
  20. 考研中的知识(自用)

热门文章

  1. fill value must be in categories解决一例
  2. 用scikit-learn进行LDA降维(转载+注释)
  3. 统计学习方法例2.1实现(转)
  4. xfce右键open in terminal失效问题解决
  5. args和kwargs以及argv用法
  6. 图像处理傅里叶变换的理解及其matlab实现
  7. 1.12 四类向量组
  8. php从大到小排列数字,php输入几个数从大到小排序
  9. Airflow的SimpleHttpOperator不支持https问题解决
  10. 适时选择getDeclaredxxx和getxxx