Java虚拟机学习

JVM调优

2020-02-14  本文已影响0人  Suny____
1、GC优化

内存被使用了之后,难免会有不够用或者达到设定值的时候,就需要对内存空间进行垃圾回收。

要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps - Xloggc:gc.log
可以看到默认使用的是ParallelGC
2019-06-10T23:21:53.305+0800: 1.303:
[GC (Allocation Failure) [PSYoungGen: 65536K[Young区回收前]->10748K[Young区回收后]
(76288K[Young区总大小])] 65536K[整个堆回收前]->15039K[整个堆回收后](251392K[整个堆总大小]),
0.0113277 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
注意如果回收的差值中间有出入,说明这部分空间是Old区释放出来的
参数设置:-XX:+UseConcMarkSweepGC -Xloggc:cms-gc.log
CommandLine flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:InitialHeapSize=52428800 -XX:+ManagementServer -XX:MaxHeapSize=52428800 -XX:MaxNewSize=17477632 -XX:MaxTenuringThreshold=6 -XX:NewSize=17477632 -XX:OldPLABSize=16 -XX:OldSize=34951168 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC 
# 由于CMS垃圾回收器是针对老年代的, 所以JVM又自动帮我们加上了新生代的收集器UseParNewGC
2020-02-14T19:29:21.502+0800: 1.592: [GC (Allocation Failure) 2020-02-14T19:29:21.502+0800: 1.592: [ParNew: 15184K->1630K(15360K), 0.0025403 secs] 25518K->12754K(49536K), 0.0025893 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2020-02-14T19:29:21.504+0800: 1.595: [GC (CMS Initial Mark 初始标记) [1 CMS-initial-mark: 11124K(34176K)] 13010K(49536K), 0.0003460 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2020-02-14T19:29:21.505+0800: 1.595: [CMS-concurrent-mark-start 并发标记]
2020-02-14T19:29:21.513+0800: 1.603: [CMS-concurrent-mark: 0.008/0.008 secs] [Times: user=0.05 sys=0.00, real=0.01 secs] 
2020-02-14T19:29:21.513+0800: 1.603: [CMS-concurrent-preclean-start]
2020-02-14T19:29:21.513+0800: 1.604: [CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2020-02-14T19:29:21.513+0800: 1.604: [GC (CMS Final Remark 最终标记) [YG occupancy: 3166 K (15360 K)]2020-02-14T19:29:21.513+0800: 1.604: [Rescan (parallel) , 0.0005004 secs]2020-02-14T19:29:21.514+0800: 1.604: [weak refs processing, 0.0000946 secs]2020-02-14T19:29:21.514+0800: 1.604: [class unloading, 0.0022654 secs]2020-02-14T19:29:21.516+0800: 1.607: [scrub symbol table, 0.0037533 secs]2020-02-14T19:29:21.520+0800: 1.610: [scrub string table, 0.0005109 secs][1 CMS-remark: 11124K(34176K)] 14291K(49536K), 0.0074995 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2020-02-14T19:29:21.521+0800: 1.611: [CMS-concurrent-sweep-start 并发清理]
2020-02-14T19:29:21.524+0800: 1.614: [CMS-concurrent-sweep: 0.003/0.003 secs] [Times: user=0.05 sys=0.00, real=0.00 secs] 
2020-02-14T19:29:21.524+0800: 1.614: [CMS-concurrent-reset-start 重新初始化CMS内部数据结构,以备下一轮 GC 使用]
2020-02-14T19:29:21.524+0800: 1.614: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2020-02-14T19:29:21.607+0800: 1.698: [GC (Allocation Failure) 2020-02-14T19:29:21.608+0800: 1.698: [ParNew: 15326K->1664K(15360K), 0.0022847 secs] 22953K->12516K(49536K), 0.0023406 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
参数设置:-XX:+UseG1GC -Xloggc:g1-gc.log
# young gc
#什么时候发生的GC,相对的时间刻,GC发生的区域young,总共花费的时间,0.0019663s,
2020-02-14T19:35:42.242+0800: 0.680: [GC pause (G1 Evacuation Pause) (young), 0.0019663 secs]
    # 多少个垃圾回收线程,并行的时间
   [Parallel Time: 1.5 ms, GC Workers: 8]
   # GC线程开始相对于上面的0.680的时间刻
      [GC Worker Start (ms): Min: 680.1, Avg: 680.1, Max: 680.2, Diff: 0.1]
      [Ext Root Scanning (ms): Min: 0.0, Avg: 0.3, Max: 0.7, Diff: 0.7, Sum: 2.1]
      [Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
         [Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0]
      [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.2]
      [Object Copy (ms): Min: 0.6, Avg: 1.0, Max: 1.1, Diff: 0.5, Sum: 8.0]
      [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.3]
         [Termination Attempts: Min: 1, Avg: 17.0, Max: 31, Diff: 30, Sum: 136]
      [GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.5]
      [GC Worker Total (ms): Min: 1.3, Avg: 1.4, Max: 1.4, Diff: 0.1, Sum: 11.1]
      [GC Worker End (ms): Min: 681.5, Avg: 681.5, Max: 681.5, Diff: 0.0]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 0.1 ms]
   [Other: 0.3 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 0.2 ms]
      [Ref Enq: 0.0 ms]
      [Redirty Cards: 0.1 ms]
      [Humongous Register: 0.0 ms]
      [Humongous Reclaim: 0.0 ms]
      [Free CSet: 0.0 ms]
   [Eden: 9216.0K(9216.0K)->0.0B(20.0M) Survivors: 0.0B->2048.0K Heap: 9216.0K(50.0M)->1804.4K(50.0M)]
 [Times: user=0.00 sys=0.00, real=0.00 secs] 

 # mixed gc
 2020-02-14T19:35:43.648+0800: 2.086: [GC pause (G1 Evacuation Pause) (mixed), 0.0034092 secs]
   [Parallel Time: 2.8 ms, GC Workers: 8]
      [GC Worker Start (ms): Min: 2086.4, Avg: 2086.4, Max: 2086.5, Diff: 0.1]
      [Ext Root Scanning (ms): Min: 0.1, Avg: 0.2, Max: 0.7, Diff: 0.6, Sum: 1.8]
      [Update RS (ms): Min: 0.2, Avg: 0.6, Max: 0.8, Diff: 0.6, Sum: 4.6]
         [Processed Buffers: Min: 1, Avg: 2.5, Max: 4, Diff: 3, Sum: 20]
      [Scan RS (ms): Min: 0.0, Avg: 0.2, Max: 0.5, Diff: 0.5, Sum: 1.3]
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.2]
      [Object Copy (ms): Min: 1.3, Avg: 1.6, Max: 1.7, Diff: 0.4, Sum: 12.5]
      [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
         [Termination Attempts: Min: 1, Avg: 1.3, Max: 2, Diff: 1, Sum: 10]
      [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1]
      [GC Worker Total (ms): Min: 2.5, Avg: 2.6, Max: 2.6, Diff: 0.1, Sum: 20.5]
      [GC Worker End (ms): Min: 2089.0, Avg: 2089.0, Max: 2089.0, Diff: 0.0]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 0.2 ms]
   [Other: 0.4 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 0.2 ms]
      [Ref Enq: 0.0 ms]
      [Redirty Cards: 0.1 ms]
      [Humongous Register: 0.0 ms]
      [Humongous Reclaim: 0.0 ms]
      [Free CSet: 0.0 ms]
   [Eden: 1024.0K(1024.0K)->0.0B(24.0M) Survivors: 4096.0K->1024.0K Heap: 19.9M(50.0M)->18.0M(50.0M)]
 [Times: user=0.00 sys=0.00, real=0.00 secs] 
# cms-log
Throughput(吞吐量)     Mix Pause     Max Pause      Avg Pause      GC次数
96.15%                0.00035s      0.0075s         0.00259s        36
2、高并发场景实战调优
高并发下堆内存设置.png
3、性能优化指南
性能优化.png
4、JVM常见问题思考
上一篇 下一篇

猜你喜欢

热点阅读