JVM

    技术2022-07-15  57

    诊断工具学习

    一、常用命令二、可视化故障处理工具VisualVM三、调优分析实战

    一、常用命令

    jps:进程状况工具

    项作用jps -q只输出LVMIDjps -m输出虚拟机进程启动时传递给主类main()函数的参数jps -l输出主类的全名,如果进程执行的是jar包,则输出jar路径jps -v输出虚拟机进程启动时的JVM参数

    jstat:虚拟机统计信息监视工具

    如: 打印gc进程数为15084时间间隔250毫秒,总共打印20次命令如下: jstat -gc 15084 250 20 Option:常用参数如下: -class (类加载器) -compiler (JIT) -gc (GC堆状态) -gccapacity (各区大小) -gccause (最近一次GC统计和原因) -gcnew (新区统计) -gcnewcapacity (新区大小) -gcold (老区统计) -gcoldcapacity (老区大小) -gcpermcapacity (永久区大小) -gcutil (GC统计汇总) -printcompilation (HotSpot编译统计)

    - jinfo:Java配置信息工具 作用:实时查看和调整虚拟机各项参数 打开GC详情:jinfo -flag +PrintGCDetails 15084(关闭的话把+去掉即可)。

    二、可视化故障处理工具VisualVM

    位于java安装bin目录下 离线 插件安装下载地址 根据自己的jdk版本进行下载 点击导航栏的工具—>选择插件—>点击已下载—>添加刚刚下载好的插件—>点击安装即可。

    三、调优分析实战

    创建一个springboot项目,模拟代码如下

    初始调优参数: -XX:+PrintGCDetails -Xms1000M -Xmx1000M

    idea配置java虚拟机位置如下: 运行程序发现启动springboot项目发生了一次Full GC,并且元数据只用不到60M,增加元空间参数进行调优

    第一次调优参数如下: -XX:+PrintGCDetails -Xms1000M -Xmx1000M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M

    发现启动不在发生Full GC,使用Jmeter执行50000个线程数进行调用,发现Minior GC次数过多,并且老年代不需要这么多空间 增大年轻代的空间大小,减少老年代空间大小

    第二次调优参数如下: -XX:+PrintGCDetails -Xms1000M -Xmx1000M -Xmn800M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M

    发现GC次数和频率明显降低 查看GC日志,每一次存活的对象大概95~120M之间,那么假定Eden区存活的对象有120M在Eden区存活并且要进入到survivor区,为避免动态对象年龄判定直接进入老年代,故分配给survivor区各240M的区域大小,保证进入survior区占空间的一半。 1900M 新生代大小,survivor区总占用240M,故Eden区占用1900 -480= 1420M ,故Eden:Survivor = 1420 :240 ,按照6:1进行调优

    第三次调优参数如下: -XX:+PrintGCDetails -Xms2000M -Xmx2000M -Xmn1900M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M -XX:SurvivorRatio=6

    上一篇:JVM_日志_内存分配与回收策略_JVM学习(二)

    Processed: 0.014, SQL: 9