一、前提
某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过618大促之后,和运维的同学讨论了下,希望将线上服务器的jvm参数标准化,可以以一个统一的方式给到各个应用,提升线上服务器的稳定性,同时减少大家都去调整jvm参数的时间。
参考了之前在淘宝天猫工作的公司的经历:经过大家讨论,根据jdk的版本以及线上机器配置,确定了一个推荐的默认jvm模版:
二、配置说明1.、堆设置
o -Xms:初始堆大小
o -Xmx:最大堆大小
o -XX:NewSize=n:设置年轻代大小
o -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
o -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
o -XX:MaxPermSize=n:设置持久代大小
2、收集器设置
o -XX:+UseSerialGC:设置串行收集器
o -XX:+UseParallelGC:设置并行收集器
o -XX:+UseParalledlOldGC:设置并行年老代收集器
o -XX:+UseConcMarkSweepGC:设置并发收集器
3、垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
4、并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
三、长期表现第一个变化:fgc的次数减少,减少了大概一倍以上;
mobile工程,调整前基本上一天1-2辆次,调整后基本上就是2-3天一次
四、总结Jvm调优这块还是有一定难度的有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足、内存泄露、线程死锁、Java进程消耗CPU过高这些问题在日常开发容易忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源)但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优底层原理进行解析,希望能起抛砖引玉之用。那么,如何系统的学习 JVM 呢?小编给大家推荐2分钱就能学习JVM的课程之前报名是588元限时200名抢购价是0.02元,讲师是以前来自阿里的技术专家亲授。具体报名方式:识别图中二维码即可参与
推荐理由:
一、授课老师是小编多年的好朋友。二、原价588元,小编帮大家砍成了0.02元(2分钱)。核心技术:1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?2、Java代码是怎么运行的?3、Java虚拟机是如何加载Java类的?4、JVM运行内存的分类5、如何监控和诊断JVM堆内和堆外内存使用?6、Java四引用是什么?7、如何理解JVM内置的编译或GC日志?8、JVM的永久代中会发生垃圾回收么?9、Java中的两种异常类型是什么?他们有什么区别?10、JVM是如何实现同步的?11、Java内存模型是什么?12、即时编译器有哪些优化?13、在什么情况下重复读写操作会被优化?14、什么样的垃圾才被回收?15、什么时候会导致垃圾回收?16、如何利用JFR和JMC监控Java程序?17、如何利用UnsafeAPI 绕开 JVM的控制?18、如何利用字节码注入为已有代码加料?
▼点击『阅读原文』进入《JVM虚拟机底层原理分析与性能优化》课程,只需0.02元