| Demonstrations of ugc. |
| |
| |
| ugc traces garbage collection events in high-level languages, including Java, |
| Python, Ruby, and Node. Each GC event is printed with some additional |
| information provided by that language's runtime, if available. The duration of |
| the GC event is also provided. |
| |
| For example, to trace all garbage collection events in a specific Node process: |
| |
| # ugc $(pidof node) |
| Tracing garbage collections in node process 30012... Ctrl-C to quit. |
| START TIME (us) DESCRIPTION |
| 1.500 1181.00 GC scavenge |
| 1.505 1704.00 GC scavenge |
| 1.509 1534.00 GC scavenge |
| 1.515 1953.00 GC scavenge |
| 1.519 2155.00 GC scavenge |
| 1.525 2055.00 GC scavenge |
| 1.530 2164.00 GC scavenge |
| 1.536 2170.00 GC scavenge |
| 1.541 2237.00 GC scavenge |
| 1.547 1982.00 GC scavenge |
| 1.551 2333.00 GC scavenge |
| 1.557 2043.00 GC scavenge |
| 1.561 2028.00 GC scavenge |
| 1.573 3650.00 GC scavenge |
| 1.580 4443.00 GC scavenge |
| 1.604 6236.00 GC scavenge |
| 1.615 8324.00 GC scavenge |
| 1.659 11249.00 GC scavenge |
| 1.678 16084.00 GC scavenge |
| 1.747 15250.00 GC scavenge |
| 1.937 191.00 GC incremental mark |
| 2.001 63120.00 GC mark-sweep-compact |
| 3.185 153.00 GC incremental mark |
| 3.207 20847.00 GC mark-sweep-compact |
| ^C |
| |
| The above output shows some fairly long GCs, notably around 2 seconds in there |
| is a collection that takes over 60ms (mark-sweep-compact). |
| |
| Occasionally, it might be useful to filter out collections that are very short, |
| or display only collections that have a specific description. The -M and -F |
| switches can be useful for this: |
| |
| # ugc -F Tenured $(pidof java) |
| Tracing garbage collections in java process 29907... Ctrl-C to quit. |
| START TIME (us) DESCRIPTION |
| 0.360 4309.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 2.459 4232.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 4.648 4139.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| ^C |
| |
| # ugc -M 1 $(pidof java) |
| Tracing garbage collections in java process 29907... Ctrl-C to quit. |
| START TIME (us) DESCRIPTION |
| 0.160 3715.00 MarkSweepCompact Code Cache used=287528->3209472 max=173408256->251658240 |
| 0.160 3975.00 MarkSweepCompact Metaspace used=287528->3092104 max=173408256->18446744073709551615 |
| 0.160 4058.00 MarkSweepCompact Compressed Class Space used=287528->266840 max=173408256->1073741824 |
| 0.160 4110.00 MarkSweepCompact Eden Space used=287528->0 max=173408256->69337088 |
| 0.160 4159.00 MarkSweepCompact Survivor Space used=287528->0 max=173408256->8650752 |
| 0.160 4207.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 0.160 4289.00 used=0->0 max=0->0 |
| ^C |
| |
| |
| USAGE message: |
| |
| # ugc -h |
| usage: ugc.py [-h] [-l {java,python,ruby,node}] [-v] [-m] [-M MINIMUM] |
| [-F FILTER] |
| pid |
| |
| Summarize garbage collection events in high-level languages. |
| |
| positional arguments: |
| pid process id to attach to |
| |
| optional arguments: |
| -h, --help show this help message and exit |
| -l {java,python,ruby,node}, --language {java,python,ruby,node} |
| language to trace |
| -v, --verbose verbose mode: print the BPF program (for debugging |
| purposes) |
| -m, --milliseconds report times in milliseconds (default is microseconds) |
| -M MINIMUM, --minimum MINIMUM |
| display only GCs longer than this many milliseconds |
| -F FILTER, --filter FILTER |
| display only GCs whose description contains this text |
| |
| examples: |
| ./ugc -l java 185 # trace Java GCs in process 185 |
| ./ugc -l ruby 1344 -m # trace Ruby GCs reporting in ms |
| ./ugc -M 10 -l java 185 # trace only Java GCs longer than 10ms |