I'm spiderman I'm spiderman
首页
  • 中间件
  • 基础架构
  • 微服务
  • 云原生
  • Java
  • Go
  • PHP
  • Python
  • 计算机网络
  • 操作系统
  • 数据结构
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档

spiderman

快乐学习,快乐编程
首页
  • 中间件
  • 基础架构
  • 微服务
  • 云原生
  • Java
  • Go
  • PHP
  • Python
  • 计算机网络
  • 操作系统
  • 数据结构
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
  • Java

    • Java基本原理
    • JVM原理
    • 线程
    • Spring原理
    • Mybatis和JPA
    • JVM调优
    • Golang

    • PHP

    • Python

    • 计算机语言
    • Java
    spiderman
    2023-05-23
    目录

    JVM调优

    # Arthas

    1. Arthas安装

    curl -O https://alibaba.github.io/arthas/arthas-boot.jar
    java -jar arthas-boot.jar
    
    1
    2

    2. 启动成功后会显示如下

    arthas

    3. dashboard (显示线程、堆,gc所有信息)

    输入命令之后可显示当前进程的所有线程信息,堆信息,gc信息以及运行程序的底层java版本等信息,这个结果还是动态的,每几秒刷新一下,详情如下图所示: arthas1

    4. thread 线程号 (打印某个线程的堆栈信息)

    在上图中我们发现有一个线程占用CPU特别高,我们可以通过这条命令看到这个线程的堆栈信息,以查找问题所在,通过图中红框中的信息,可以看到问题代码的所在,详情如下图所示: arthas2

    # jvm调优案例

    jvm

    java  -Xms3G -Xmx3G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar ***.jar
    
    1

    jvm2

    优化重点:JVM优化主要优化的是Full gc,因为一次Full gc的STW时间比较长,容易造成卡顿,使用户的体验相当不好 在jvm中大部分的对象都是朝生夕逝的,尽量别让这些对象进入老年代,主要看点就是让minor gc时,存活的对象总大小不要超过Survivor区域的S0或者S1区域的一半,如果超过一半,就会直接进入老年代,但是这些对象可能在几秒之后就变成了垃圾,所以,进入老年代只会占用过多空间,发生full gc而已

    从上面的图可以看出60M对象已经超出S0或者S1的一半了,那么这60M对象就会直接进入到老年代,然后发生full GC,等老年代被占满后,新的对象写不进去就发生OOM了

    通过调优,让full GC几乎不再发生,通过下面参数调优

    java  -Xms3G -Xmx3G -Xnn2G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar ***.jar
    
    1

    jvm3

    Mybatis和JPA
    golang基本原理

    ← Mybatis和JPA golang基本原理→

    最近更新
    01
    innovation create future
    12-13
    02
    RabbitMQ
    12-06
    03
    StarRocks的应用
    09-11
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 spiderman | 粤ICP备2023019992号-1 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式