当前位置:   article > 正文

面试官:如何进行 JVM 调优(附真实案例)_jvm如何调优面试如果回答

jvm如何调优面试如果回答

前言

面试官:在工作中做过 JVM 调优吗?讲讲做过哪些 JVM 调优?

我一个QPS不到10的项目,上次问我缓存穿透缓存雪崩,这次问我 JVM 调优,我是真滴难。

不过大家别慌,热心的我给大家找来了几个满分回答,大家选择合适的使用。

回答1:听好了,下面将是我第一次 JVM 调优。

回答2:我一般面试的时候才调优。

回答3:我一般直接加机器、加内存。

回答4:老子直接用的 ZGC,调个蛇皮。

正文

1、JVM 究竟需不需要调优?

JVM 经过这么多年的发展和验证,整体是非常健壮的。个人认为99%的情况下,基本用不到 JVM 调优。

通常来说,我们的 JVM 参数配置大多还是会遵循 JVM 官方的建议,例如:

  • -XX:NewRatio=2,年轻代:老年代=1:2

  • -XX:SurvivorRatio=8,eden:survivor=8:1

  • 堆内存设置为物理内存的3/4左右

  • 等等

JVM 参数的默认(推荐)值都是经过 JVM 团队的反复测试和前人的充分验证得出的比较合理的值,因此通常来说是比较靠谱和通用的,一般不会出大问题。

当然,更重要的是,大部分的应用 QPS 都不到10,数据量不到几万,这种低压环境下,想让 JVM 出问题,说实话也挺难的。

大部分同学更常遇到的应该是自己的代码 bug 导致 OOM、CPU load高、GC频繁啥的,这些场景也基本都是代码修复即可,通常不需要动 JVM。

当然,俗话说得好,凡事无绝对,还是有一小部分场景,是可能需要用到 JVM 调优的。具体哪些场景,我们在下面介绍。

值得一提的是,我们这边所说的 JVM 调优更多的是针对自己的业务场景对 JVM 参数进行优化调整,使其更适合我们的业务,而不是指对 JVM 源码的改动。

2、JVM 调优没有什么必要,使用性能更好的垃圾回收器就能解决问题了?

这是我在网上看到的一个说法,因为赞同的人比较多,我估计有不少同学也会有这个想法,因此在这边谈下自己的看法。

1)实战角度

不考虑应付面试的因素,升级垃圾回收器确实会是最有效的方式之一,例如:CMS 升级到 G1,甚至 ZGC。

这个很容易理解,更高版本的垃圾回收器相当于是 JVM 开发人员对 JVM 做的优化,人家毕竟是专门做这个的,所以通常来说升级高版本的性能会有不少的提升。

G1 目前已经有开始在逐渐应用开来,周围有不少团队在 JDK8 中使用了 G1,就我了解到的,还是存在不少问题的,不少同学在不断进行参数的调整,而在 JDK11 中能优化成啥样还有待验证。

ZGC 目前应用的还比较少,仅从对外公布的数据来看很好看,最大暂停时间不超过10ms,甚至是1ms,大家都抱有很高的期望。但是从目前我收集到的一些资料来看,ZGC 也并不是银弹,已知的明显问题有:

  • 吞吐量相较于 G1 会有所下降,官方称最大不超过15%

  • ZGC如果遇到非常高的对象分配速率(allocation rate)的话会跟不上,目前唯一有效的“调优”方式就是增大整个GC堆的大小来让ZGC有更大的喘息空间——R大与ZGC领队沟通后的原话

而且,随着后续 ZGC 应用开来,后续一定会不断出现更多问题的。

整体而言,个人觉得 JVM 调优在某些场景下还是有必要的,毕竟有句话叫:没有最好的,只有最合适的。

2)面试角度

如果你回答直接升级垃圾收集器,面试官可能也赞同,但是这个话题可能就这样结束了,面试官大概率没听到他想要的回答,你在这题的肯定拿不到加分,甚至可能会被扣分。

所以,在面试的时候,你可以回答升级垃圾收集器,但是你不能只回答升级垃圾收集器。

3、JVM 何时优化?

忌过早优化。《计算机程序设计艺术》的作者高德纳(Donald Ervin Knuth&#x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/918852
推荐阅读
相关标签
  

闽ICP备14008679号