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

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

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


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


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


1 🍏结构及内存模型

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


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

573392b7c898b7e37384159ca1ee1a3e.png


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

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

  • 首先:做到心中有图442bc23159a008256ab525e28c9ec8fc.png


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

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

  • IDEA编辑器:

b3b7b0de87c264bd2155daa3495e73a0.png

  • 命令行脚本:
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倍。

3f6621924aabc0d6a299d4e0941cb665.gif

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

e55914c8ec8e1615620571f57d42c5fb.png


  • 基于以上的分析: 我们可以对JVM参数进行如下设置
java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSiz


  • JVM调优效果图

2d93226d420542b9489546bdd8eb4c39.png

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

相关文章
|
1月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
17 0
|
20天前
|
弹性计算 缓存 Linux
云服务器 ECS产品使用问题之如何修改游戏参数
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
20天前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
|
20天前
|
SQL 缓存 前端开发
PHP性能优化实战:从代码到服务器的全方位攻略
【7月更文挑战第30天】在Web开发的世界里,PHP以其灵活性和易用性赢得了广泛的赞誉。然而,随着应用规模的扩大,性能问题逐渐浮现。本文将深入探讨PHP的性能优化策略,不仅涉及代码层面的精细调整,还包括服务器配置的优化技巧。我们将一起探索如何通过减少资源消耗、优化数据库交互以及利用缓存技术来提升PHP应用的性能表现。无论你是PHP新手还是资深开发者,这篇文章都将为你提供实用的优化建议,帮助你打造更快、更稳定的PHP应用。
32 4
|
20天前
|
运维 监控 Java
(十)JVM成神路之线上故障排查、性能监控工具分析及各线上问题排错实战
经过前述九章的JVM知识学习后,咱们对于JVM的整体知识体系已经有了全面的认知。但前面的章节中,更多的是停留在理论上进行阐述,而本章节中则更多的会分析JVM的实战操作。
|
23天前
|
存储 Java
java 服务 JVM 参数设置配置
java 服务 JVM 参数设置配置
23 3
|
3天前
|
存储 监控 算法
深入解析JVM内部结构及GC机制的实战应用
深入解析JVM内部结构及GC机制的实战应用
|
5天前
|
缓存 PHP 数据库
PHP性能优化实战:从代码到服务器的全方位攻略
在数字化时代,Web应用的性能直接影响用户体验和业务成果。作为流行的后端开发语言,PHP的性能优化是提升网站响应速度的关键。本文将通过实际案例分析,探讨PHP代码级别的优化策略、数据库交互效率提升以及服务器配置调优,旨在帮助开发者全面提升PHP应用性能。
10 0
|
1月前
|
缓存 监控 Java
Java虚拟机(JVM)性能调优实战指南
在追求软件开发卓越的征途中,Java虚拟机(JVM)性能调优是一个不可或缺的环节。本文将通过具体的数据和案例,深入探讨JVM性能调优的理论基础与实践技巧,旨在为广大Java开发者提供一套系统化的性能优化方案。文章首先剖析了JVM内存管理机制的工作原理,然后通过对比分析不同垃圾收集器的适用场景及性能表现,为读者揭示了选择合适垃圾回收策略的数据支持。接下来,结合线程管理和JIT编译优化等高级话题,文章详细阐述了如何利用现代JVM提供的丰富工具进行问题诊断和性能监控。最后,通过实际案例分析,展示了性能调优过程中可能遇到的挑战及应对策略,确保读者能够将理论运用于实践,有效提升Java应用的性能。 【
125 10
|
12天前
|
算法 Java
JVM常用运行时参数说明
JVM常用运行时参数说明