• notice
  • Congratulations on the launch of the Sought Tech site

full gc monitoring analysis

Command to view gc situation, and jvm memory usage ratio

  1. How to find out whether FULL GC occurs and whether FULL GC frequently uses the jstat syntax structure, a lightweight gadget that comes with JDK:

    Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

    Parameter explanation: Options - options, we generally use -gcutil to view the gc situation vmid - the process number of the VM, that is, the currently running java process number interval - the interval time, in seconds or milliseconds For example, /opt/taobao/java/bin/jstat –gcutil pid 5000 jstat -gcutil pid

[root@wangfw-smarttrip-dev-7 ~]# jstat -gcutil 15393 S0 S1 EOP YGC YGCT FGC FGCT GCT 0.00 22.50 71.58 34.74 97.33 3961 44.900 26 6.021 50.921

S0 — Survivor space on the Heap The percentage of used space in area 0

    S1 — Percentage of used space in Survivor space 1 area on the Heap

    E — The percentage of used space in the Eden space area on the Heap

    O — The percentage of used space in the Old space area on the Heap

    P — Perm space used space percentage

    YGC — The number of Young GCs that occurred from application startup to sampling time

    YGCT – Time spent by Young GC from application startup to sampling time (in seconds)

    FGC — The number of times a Full GC occurred from application startup to sampling

    FGCT – The time (in seconds) spent by Full GC from application startup to sampling time

     GCT — total time (in seconds) used for garbage collection from application startup to sampling

    Through FGC, we can find out whether the system has FULL GC and the frequency of FULL GC

2. FULL GC analysis and problem location

    a. GC log collection and analysis

    (1) Increase the JVM startup parameters: -verbose:gc -Xloggc:<file_name> -XX:+Print GCDetails -XX:+PrintGCDateStamps

    PrintGCTimeStamp can only get relative time, it is recommended to use PrintGCDateStamps to get absolute time when full gc occurs

      (2) If CMS GC is used, careful analysis of the jstat FGC output and GC log will reveal that each concurrent GC cycle of CMS has two stop-the-world stages—initial mark and final re-mark, so that each concurrent GC cycle of CMS has two stop-the-world stages—initial mark and final re-mark A total of two concurrent GC cycles will update the full GC counter twice, one for the initial mark and one for the final re-mark
    b. Dump JVM memory snapshot
/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid

    The question here is when to dump?

    One method is to observe with the jstat tool mentioned above. When the OLD area reaches a relatively high ratio such as 60%, a FULL GC will generally be triggered soon, and a DUMP can be performed. After the FULL GC occurs, DUMP is performed again. You can find out which objects are causing the non-stop FULL GC

    Another way is by configuring JVM parameters
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC is used to specify to generate heap dump before and after full GC respectively

    c. Use the MAT ((Memory Analyzer Tool) tool to analyze the dump file

    There are many introductions on the Internet about the specific use of MAT. I will not expand it in detail here. It should be noted here:

    (1) MAT only analyzes reachable objects by default, unreachable objects (objects to be collected) are ignored, and unreachable objects should also be focused on when analyzing the frequent causes of FULL GC. If you want to display unreachable object details, you must use mat 1.1 or later and turn on the option "keep unreachable object"

    (2) Usually the dump file will be several G, which cannot be directly analyzed on Windows. We can first analyze the dump file on Linux, then copy the analyzed file to Windows, and use MAT to open the analysis file on Windows. .


Technical otaku

Sought technology together

Related Topic


Leave a Reply