前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何应对面试官的JVM调优问题

如何应对面试官的JVM调优问题

原创
作者头像
诺浅
修改2020-08-19 14:41:42
4940
修改2020-08-19 14:41:42
举报
文章被收录于专栏:工具使用

为什么要进行JVM调优

我猜你肯定是为了面试,现在很多公司都会问这个,虽然你工作了N年JVM调优可能都不会接触到,但我觉得还是有考察的必要的。因为很多时候我们考察一个人不光要考察他的硬实力,还要看他有没有持续学习、深入研究的精神,一只咸鱼是不会看JVM调优的。

JVM调优真的有用吗?能解决什么问题?

用肯定是有用的。但是,默认的大部分情况是足够你用的,出了问题应该先从程序找问题,不要让JVM背锅好吗?

在这里插入图片描述
在这里插入图片描述

如何应对面试官问的JVM调优的问题

我觉得应该很少有面试官会上来就问JVM调优怎么调,毕竟这显得有点奇怪。大概率会这样问

  1. 如果你的系统CPU/内存占用100%了你怎么办?
  2. 如果你的系统忽然不能响应了你怎么排查?
  3. 如果你的系统压测数据上不去你除了加负载还有没有其他的好办法?

这类问题你要回答的满意,肯定会涉及到怎么使用jmap, jstat,JConsole......balabala这些工具来排查和定位问题。那么接下来的问题就引出了两个,

  1. 请说说你上诉说的这些工具的使用方式
  2. 比如你定位出了老年代内存一直回收不掉,你应该怎么处理呢?

接下来才会引出JVM调优的问题

  1. 你还知道JVM有其他的什么可以调优的参数选项吗?

JVM调优参数

-Xmx4g –Xms4g –Xmn1200m –Xss512k -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:PermSize=100m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15

如果是堆内存不够: 尝试调整-Xmx–Xms选项,这个值代表最大堆内存和初始化堆内存的大小

如果是想提高系统的并发性能: 可以尝试降低–Xss的值,这个值代表每个线程的堆栈大小,JDK5.0以后每个线程堆栈大小为1MB,以前每个线程堆栈大小为256K。应根据应用线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。别调太小了,太小了栈溢出了。

调整对象在年轻代存活的时间: -XX:MaxTenuringThreshold 默认值15,这个值代表垃圾最大年龄,对于老年代比较多的应用,减少这个值可以提高效率。对于年轻代比较多的应用,增加这个值可以增加数据在年轻代即被回收的概率。这个值调整需要尤其注意,设置小了可能引发老年代频繁full GC,设置大了可能导致某些数据长期存活于新生代,每一次Minor GC都要拷贝它,很影响性能的。

调整CMS垃圾回收器并行线程数: -XX:ConcGCThreads=4 CMS垃圾回收器并行线程线,推荐值为CPU核心数。

记得把最小值和最大值设置成同一个: 应尽量把永久代的初始值与最大值设置为同一值,因为永久代的大小调整需要进行FullGC才能实现。设置为同一个就可以防止内存抖动

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要进行JVM调优
  • JVM调优真的有用吗?能解决什么问题?
  • 如何应对面试官问的JVM调优的问题
  • JVM调优参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档