大型电商JVM调优经历分享

一、前提

某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过618大促之后,和运维的同学讨论了下,希望将线上服务器的jvm参数标准化,可以以一个统一的方式给到各个应用,提升线上服务器的稳定性,同时减少大家都去调整jvm参数的时间。
参考了之前在淘宝天猫工作的公司的经历:经过大家讨论,根据 jdk的版本以及线上机器配置,确定了一个推荐的默认jvm模版:

640?wx_fmt=png

二、配置说明
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天一次

640?wx_fmt=png

640?wx_fmt=png

四、总结

Jvm调优这块还是有一定难度的有时候我们会碰到下面这些问题:
OutOfMemoryError,内存不足、内存泄露、线程死锁、Java进程消耗CPU过高
这些问题在日常开发容易忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源)但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优底层原理进行解析,希望能起抛砖引玉之用。
那么,如何系统的学习 JVM 呢?小编给大家推荐2分钱就能学习JVM的课程
之前报名是588元限时200名抢购价是0.02元,讲师是以前来自阿里的技术专家亲授。
具体报名方式:识别图中二维码即可参与

640?wx_fmt=png

推荐理由
一、授课老师是小编多年的好朋友。
二、原价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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值