JVM调优-问题排查与工具使用案例一(Server服务器)

7 篇文章 1 订阅

指导原则

          多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题。在实际使用中,分析GC情况优化代码比优化GC参数要多得多,GC优化往往是最后的手段。

指标参考 

          a.Minor GC执行时间不到50ms;

          b.Minor GC执行不频繁,约10秒一次;

          c.Full GC执行时间不到1s;

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

业务案例

         某个业务系统在正常运行一段时间后开始变慢,重启后恢复正常,于是踏上代码排查与JVM调优之路。根据服务器的实际配置,当前业务系统主要考虑低延迟和增大吞吐量。(选择调优方向请参考:https://blog.csdn.net/Simon111Qiu/article/details/109409528

         

jvisualvm.exe工具

        1、连接JVM对应的进程

        通过jvisualvm.exe工具进行本地或远程JVM的监控。在JDK安装的bin文件下可以找到jvisualvm.exe工具并打开,通过在连接中创建本地JVM或远程JVM进程的连接(Java进程),如下图:

         

         PS:对于Windows系统上通过服务启动的Tomcat,则需要在启动配置中添加如下配置方可进行本地或远程通过JMX连接,如下图所示:

         从上到下依次是:开放JMX连接的端口;是否使用安全连接;是否设置权限认证(设置口令)

         -Dcom.sun.management.jmxremote.port=12321
         -Dcom.sun.management.jmxremote.ssl=false
         -Dcom.sun.management.jmxremote.authenticate=false

         

        2、获取对象数据

        在连接信息上右键选择进行堆内存的备份(dump),如下图所示:

        

        选择占用内存较多的类对象进行代码分析,通过优化代码的方式减少对象的创建和JVM的GC操作。如下图所示:

         

Jconsole.exe工具

        1、连接JVM对应的进程(多个Tomcat容器使用同一个JDK会创建不同的JVM进程)

         因为使用的是windows server服务器,本次问题排查使用的是JDK自带的Jconsole工具,通过Jconsole.exe工具进行本地或远程JVM的监控。在JDK安装的bin文件下可以找到Jconsole.exe工具并打开,通过在连接中创建本地JVM或远程JVM进程的连接(Java进程),如下图:

         

         PS:对于Windows系统上通过服务启动的Tomcat,参照jvisualvm的操作。

     2、概要

      通过概要了解堆内存使用情况、线程活动情况、CPU占用率等重要参数。当设置的JVM内存不满足堆内存等的使用时则会造成内存溢出。

      

      3、内存参数

       了解堆内存GC的情况,如年轻代GC的次数和总的耗费时间,老年代总的GC次数和总的耗费时间。从而可以得到年轻代和老年代GC的频次和平均持续时间。如下:

       ①年轻代当前总的GC次数:34次;(一般次数多的是年轻代的垃圾收集器)

       ②年轻代平均GC持续时间:0.164s/34*1000≈4.9ms;(会造成应用停止)(OK

       ③老年代当前总的GC次数:3次;

       ④老年代平均GC持续时间:0,207s/3*1000≈69ms;(OK

       ⑤年轻代GC频次:3min*60/34次≈5.3s一次;(有点快

       ⑥老年代GC频次:3min*60/3次≈60s一次;(有点快

       通过以上参数可以得出,需要选择合适的垃圾回收器并分配合适的堆内存大小。

       参考:https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html;垃圾回收器设置参考《Behavioral Options》部分,堆内存等大小设置参考《Performance Options》部分或者其他设置方式。

      

      PS:同时可以通过手动GC的方式在系统负载最高的时候或性能较差的时候观察GC的持续时间(最坏的GC时间),通过这个时间来作为JVM内存优化的一个参考。

      其他界面参数有兴趣可以继续进行研究。

      最后,往上有很多调整参数的方式,暂时不进行研究了,找了如下参考:

      1、https://www.jianshu.com/p/d45e12241af4

      2、https://www.cnblogs.com/andy-zhou/p/5327288.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值