目录

  • 调优工具
  • 下载jar包
  • 执行代码并且启动jar包
  • 什么是调优
  • 为什么调优
  • 为什么在进行垃圾回收的时候,要停止用户线程
  • 什么情况会发生full gc
  • 如何解决这种情况的full gc


调优工具

下载jar包

java 调优 常见设置 java调优命令_调优


这个阿里巴巴的jvm的调优工具,这个就是一个jar包,只要下载下来,执行这个jar包就可以了

Arthas启动的前提是要启动你的java项目,因为Arthas启动时会自动扫描机器上运行的java项目

执行代码并且启动jar包

java 调优 常见设置 java调优命令_java 调优 常见设置_02


以上是我们运行的代码

java 调优 常见设置 java调优命令_调优_03


以上是官网

因为这个工具是监控我们的Java代码,所以启动之前要执行Java代码

java -jar arthas-boot.jar

启动这个jar包,那么我们看见的就是当前本级里面,有多少的Java程序执行

我们自己写的Java程序在第三个

java 调优 常见设置 java调优命令_面试_04


java 调优 常见设置 java调优命令_面试_05


想要监控哪个,就输入序号

java 调优 常见设置 java调优命令_面试_06


出现以上的logo,就已经启动成功了。具体使用看官网,这个只是一个工具,帮你找问题

什么是调优

减少垃圾回收(GC),最核心的就是减少full gc,减少性能,并且避免内存溢出

java 调优 常见设置 java调优命令_调优_07


当老年代也满了,就会生成一个full gc ,这个垃圾回收器就会全局收集垃圾,但是全局没有垃圾,但是还有对象一直创建,那么就会内存溢出

为什么调优

因为在进行垃圾回收的时候,会产生stw, stop the word 停止用户线程,就是一个时间只能有一个线程执行,当进行垃圾回收的时候,用户线程就会停止,给用户的 体验不好。比如

我们下订单,有时候卡一下,因为垃圾回收器正在执行,所以我们的下订单的用户线程就会停止。这个体验是不好的,所以,我们要减少full gc

为什么在进行垃圾回收的时候,要停止用户线程

因为如果不停止用户线程,本来垃圾回收器已经根据可达性分析算法找到了垃圾,已经进行完垃圾回收了,但是用户线程也结束了,其他的也标为垃圾了,难道GC还要再找一遍嘛,这个性能就变差了,所以进行垃圾回收的时候,用户线程得停止,这样性能高。

什么情况会发生full gc

当我们下订单的时候,高并发,每秒可能有300个订单,每个订单对象的大小是60M,刚开始的运行时数据区的大小为

java 调优 常见设置 java调优命令_面试_08


full gc 的原因是 老年区的垃圾多了,放不进去了,所以就得full gc,full gc 一般是很长的时间还会有,如果很短时间就一次,那么就有问题了,我们就需要调优。

当产生的对象,伊甸园区也满了,只能到幸存区,但是这个对象的大小大于幸存区大小的一半,那么就会直接到老年区,如果短时间内,有很多的对象都很大,都直接去了老年区,那么老年区就会有full gc。

这种情况不可以,我们就需要调优

如何解决这种情况的full gc

减少老年区的大小,增加伊甸园区和幸存区的大小。