调优jvm需要修改什么文件_我以为对jvm性能调优很了解,直到我到阿里面试完之后...

相信很多人对于性能调优都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。

都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高

楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。

但是直到面试了阿里之后,我发现自己在性能优化方面的知识,只是个小学生水平。

以下,是我总结的一次阿里面试中关于jvm性能优化的面试问题以及知识点。ccae1bcb0e8894bfff2430656421e344.png

一、JVM内存调优

对JVM内存的系统级的调优主要的目的是减少gc的频率和Full gc的次数。

1.Full gc

会对整个堆进行整理,包括Young、Tenured和Perm。Full gc因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full gc的次数。

2.导致Full gc的原因

1)年老代(Tenured)被写满

调优时尽量让对象在新生代gc时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 。

2)持久代Pemanet Generation空间不足

增大Perm Gen空间,避免太多静态对象 , 控制好新生代和旧生代的比例

3)System.gc()被显示调用

垃圾回收不要手动触发,尽量依靠JVM自身的机制

在对JVM调优的过程中,很大一部分工作就是对于Fullgc的调节,下面详细介绍对应JVM调优的方法和步骤。

二、JVM性能调优方法和步骤

1.监控gc的状态

使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和gc执行时间,觉得是否进行优化。

举一个例子: 系统崩溃前的一些现象:每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,Fullgc的时间也有之前的0.5s延长到4、5s

Fullgc的次数越来越多,最频繁时隔不到1分钟就进行一次Fullgc

年老代的内存越来越大并且每次Fullgc后年老代没有内存被释放

之后系统会无法响应新的请求,逐渐到达OutOfMemoryError的临界值,这个时候就需要分析JVM内存快照dump。

2.生成堆的dump文件

通过JMX的MBean生成当前的Heap信息,大小为一个3G(整个堆的大小)的hprof文件,如果没有启动JMX可以通过Java的jmap命令来生成该文件。

3.分析dump文件

打开这个3G的堆信息文件,显然一般的Window系统没有这么大的内存,必须借助高配置的Linux,几种工具打开该文件:Visual VM

IBM HeapAnalyzer

JDK 自带的Hprof工具

Mat(Eclipse专门的静态内存分析工具)推荐使用

备注:文件太大,建议使用Eclipse专门的静态内存分析工具Mat打开分析。

4.分析结果,判断是否需要优化

如果各项参数设置合理,系统没有超时日志出现,gc频率不高,gc耗时不高,那么没有必要进行gc优化,如果gc时间超过1-3秒,或者频繁gc,则必须优化。

注:如果满足下面的指标,则一般不需要进行gc:Minor gc执行时间不到50ms;

Minor gc执行不频繁,约10秒一次;

Full gc执行时间不到1s;

Full gc执行频率不算频繁,不低于10分钟1次;

5.调整gc类型和内存分配

如果内存分配过大或过小,或者采用的gc收集器比较慢,则应该优先调整这些参数,并且先找1台或几台机器进行beta,然后比较优化过的机器和没有优化的机器的性能对比,并有针对性的做出最后选择。

6.不断的分析和调整

通过不断的试验和试错,分析并找到最合适的参数,如果找到了最合适的参数,则将这些参数应用到所有服务器。54dfce222ea20d7b1d471466e93e7a31.png

三,阿里关于jvm性能调优的面试真题:java类加载过程

java内存分配

描述一下jvm加载class文件的原理机制?

gc是什么?为什么要有gc?

如何判断一个对象是否存活?

垃圾回收的优点和原理。并考虑两种回收机制。

java中会存在内存泄漏吗,请简单阐述

JVM的永久带中会发生垃圾回收吗?

java中垃圾收集的方法有哪些

解析不在这里一一给大家展示出来了,为了准备面试收集了很多大厂的面试真题,包括有性能优化,微服务,并发编程,开源框架,分布式等专题。获取方式:三连加关注,看小编主页有免费获取方式!cddfc18f2c4fbb5eca2c91932065b21b.png

jvm性能调优学习笔记:2942dd022559d6646af8699b9bd5a531.png

xmind思维导图线程

JVM 内存区域

JVM 运行时内存

垃圾回收与算法

JAVA 四中引用类型

gc 分代收集算法 VS 分区收集算法

gc 垃圾收集器

JAVA IO/NIO

JVM 类加载机制578e35bd5b761a1a39bfd5f9c24c78e4.png学习笔记每个jvm的知识点都会有详细的分析到,最后,学习笔记,除了jvm这个知识点外,还包括了很多知识点,其中包括了有基础知识、Java集合、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等学习笔记获取方式:三连加关注,看小编主页有免费获取方式!

1080道大厂面试真题。782b40948c9f8e1225d867a67ee7778b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值