别再死记硬背JVM参数了!实战“双十一”大促,亲手调教服务器

📌个人主页个人主页
​🧀 推荐专栏精品推荐
📝作者简介:一个读研中创业、打工中学习的能搞全栈、也搞算法、目前在搞大数据的奋斗者。⭐️您的小小关注是我持续输出的动力!⭐️

别再死记硬背JVM参数了!实战“双十一”大促,亲手调教服务器


先看耳熟能详的一道面试题:请问一下JAVA中JRE和JDK之间有啥联系和区别呢?,妥妥的八股文,稳稳的安排。在这个问题的引导下,就会出现请说一下虚拟机中的堆和垃圾回收方面的内容,再到后面就是请问你对于JVM调优有啥心得或者经验吗?


  • 掌握JVM做到心中有图!
  • JVM内存参数介绍以及如何使用!
  • 以电商场景,实战JVM调优!

1 🍏结构及内存模型

为了更深刻的理解JVM,把握JVM在整个JDK的位置及功能是十分重要的。


从图中可以清晰的看到jdkjre以及jvm,三者之间的结构关系,将图记下,对于面试和工作可以丝毫不慌。在这基础之上我们再深入剖析JVM的结构以及开发和面试重中之重的内存模型,就可以更加心中有数了。


2 🍎的内存参数设置及使用

对于JVM中的内存模型有哪些构成呢?以及在日常的开发过程和准备面试要掌握到啥程度呢?

  • 首先:做到心中有图

  • 对于其中的核心参数,我门要如何配置呢?

在实际的应用中我们有以下几种方式对内存进行配置:

  • IDEA编辑器:
  • 命令行脚本:
java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSiz>>e=256M ‐XX:MaxMetaspaceSize=256M ‐jar "你的应用名".jar
  • Tomcat环境下 :Tomcat启动直接加在bin目录下catalina.sh文件里

  • 然后搞懂每个参数的意义
  • -Xms: 堆内存的初始大小,默认为物理内存的1/64
  • -Xmx: 堆内存的最大大小,默认为物理内存的1/4
  • -Xmn: 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn
  • -XX:PermSize:代表永久代的初始容量。
    由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值,并设置得比初始值要大,对于8G物理内存的机器来说,一般将这两个值都设置为256M
  • -XX:MetaspaceSize: 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小), 以字节为单位,默认是21M,达到该值就会触发
    full gc进行类型卸载, 同时收集器会对该值进行调整: 如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值
  • -XX:MaxMetaspaceSize: 设置元空间最大值, 默认是-1, 即不限制, 或者说只受限于本地内存大小。

3 🍐JVM调优

**项目背景:**在一个日均百万级的订单交易系统中,假设有500万日活用户,每个用户的每秒平均点击次数在20-30次左右.

  • 根据该用户访问量场景,对JVM进行参数设计:
    • 针对500W的用户,除开正常的点击浏览之外,按照10%的购买率进行计算。这些用户的会直接对订单服务器集群进行访问。
    • 对于这50w的订单量,抛开平时没有抢购或者秒杀活动的场景,对于类似于“双十一”和“618”这类瞬间高并发的场景而言
    • 这些订单均发生在活动开始的前几分钟,算下来平均每秒1000多单.
    • 假设订单服务总共有三台服务器提供服务,按照主流的4核8G的单节点配置服务器,对着1000单进行负载均衡,平均每台分担300单/秒.
    • 除此之外,在用户的购买流程中仍然会涉及到如优惠券服务、积分服务、商品库存服务等,于是,用户订单数据将会进一步膨胀,我们假定其膨胀20倍.
    • 而且,不排除用户在整个下单购买的链路中,仍然会进行一些如查询、搜索等一系列非核心业务的请求操作,为进一步优化系统性能,我们再将该请求数据再放大10倍

      套路实在是太多,要考虑的信息量简直可怕。基于以上的分析,我们再看看具体的数据规模流向:

  • 基于以上的分析: 我们可以对JVM参数进行如下设置
java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -jar "应用名".jar
  • JVM调优效果图

综合以上的调优案例,后面再遇到类似的面试题或者实际场景便可轻松拿捏!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陶人超有料

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

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

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

打赏作者

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

抵扣说明:

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

余额充值