Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 1 | Demonstrations of ugc. |
| 2 | |
| 3 | |
| 4 | ugc traces garbage collection events in high-level languages, including Java, |
| 5 | Python, Ruby, and Node. Each GC event is printed with some additional |
| 6 | information provided by that language's runtime, if available. The duration of |
| 7 | the GC event is also provided. |
| 8 | |
| 9 | For example, to trace all garbage collection events in a specific Node process: |
| 10 | |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 11 | # ugc $(pidof node) |
Sasha Goldshtein | c325200 | 2017-02-08 13:22:40 -0500 | [diff] [blame] | 12 | Tracing garbage collections in node process 30012... Ctrl-C to quit. |
| 13 | START TIME (us) DESCRIPTION |
| 14 | 1.500 1181.00 GC scavenge |
| 15 | 1.505 1704.00 GC scavenge |
| 16 | 1.509 1534.00 GC scavenge |
| 17 | 1.515 1953.00 GC scavenge |
| 18 | 1.519 2155.00 GC scavenge |
| 19 | 1.525 2055.00 GC scavenge |
| 20 | 1.530 2164.00 GC scavenge |
| 21 | 1.536 2170.00 GC scavenge |
| 22 | 1.541 2237.00 GC scavenge |
| 23 | 1.547 1982.00 GC scavenge |
| 24 | 1.551 2333.00 GC scavenge |
| 25 | 1.557 2043.00 GC scavenge |
| 26 | 1.561 2028.00 GC scavenge |
| 27 | 1.573 3650.00 GC scavenge |
| 28 | 1.580 4443.00 GC scavenge |
| 29 | 1.604 6236.00 GC scavenge |
| 30 | 1.615 8324.00 GC scavenge |
| 31 | 1.659 11249.00 GC scavenge |
| 32 | 1.678 16084.00 GC scavenge |
| 33 | 1.747 15250.00 GC scavenge |
| 34 | 1.937 191.00 GC incremental mark |
| 35 | 2.001 63120.00 GC mark-sweep-compact |
| 36 | 3.185 153.00 GC incremental mark |
| 37 | 3.207 20847.00 GC mark-sweep-compact |
| 38 | ^C |
| 39 | |
| 40 | The above output shows some fairly long GCs, notably around 2 seconds in there |
| 41 | is a collection that takes over 60ms (mark-sweep-compact). |
| 42 | |
| 43 | Occasionally, it might be useful to filter out collections that are very short, |
| 44 | or display only collections that have a specific description. The -M and -F |
| 45 | switches can be useful for this: |
| 46 | |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 47 | # ugc -F Tenured $(pidof java) |
Sasha Goldshtein | c325200 | 2017-02-08 13:22:40 -0500 | [diff] [blame] | 48 | Tracing garbage collections in java process 29907... Ctrl-C to quit. |
| 49 | START TIME (us) DESCRIPTION |
| 50 | 0.360 4309.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 51 | 2.459 4232.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 52 | 4.648 4139.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 53 | ^C |
| 54 | |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 55 | # ugc -M 1 $(pidof java) |
Sasha Goldshtein | c325200 | 2017-02-08 13:22:40 -0500 | [diff] [blame] | 56 | Tracing garbage collections in java process 29907... Ctrl-C to quit. |
| 57 | START TIME (us) DESCRIPTION |
| 58 | 0.160 3715.00 MarkSweepCompact Code Cache used=287528->3209472 max=173408256->251658240 |
| 59 | 0.160 3975.00 MarkSweepCompact Metaspace used=287528->3092104 max=173408256->18446744073709551615 |
| 60 | 0.160 4058.00 MarkSweepCompact Compressed Class Space used=287528->266840 max=173408256->1073741824 |
| 61 | 0.160 4110.00 MarkSweepCompact Eden Space used=287528->0 max=173408256->69337088 |
| 62 | 0.160 4159.00 MarkSweepCompact Survivor Space used=287528->0 max=173408256->8650752 |
| 63 | 0.160 4207.00 MarkSweepCompact Tenured Gen used=287528->287528 max=173408256->173408256 |
| 64 | 0.160 4289.00 used=0->0 max=0->0 |
Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 65 | ^C |
| 66 | |
| 67 | |
| 68 | USAGE message: |
| 69 | |
Sasha Goldshtein | c325200 | 2017-02-08 13:22:40 -0500 | [diff] [blame] | 70 | # ugc -h |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 71 | usage: ugc.py [-h] [-l {java,python,ruby,node}] [-v] [-m] [-M MINIMUM] |
| 72 | [-F FILTER] |
| 73 | pid |
Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 74 | |
| 75 | Summarize garbage collection events in high-level languages. |
| 76 | |
| 77 | positional arguments: |
Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 78 | pid process id to attach to |
| 79 | |
| 80 | optional arguments: |
| 81 | -h, --help show this help message and exit |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 82 | -l {java,python,ruby,node}, --language {java,python,ruby,node} |
| 83 | language to trace |
Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 84 | -v, --verbose verbose mode: print the BPF program (for debugging |
| 85 | purposes) |
| 86 | -m, --milliseconds report times in milliseconds (default is microseconds) |
Sasha Goldshtein | c325200 | 2017-02-08 13:22:40 -0500 | [diff] [blame] | 87 | -M MINIMUM, --minimum MINIMUM |
| 88 | display only GCs longer than this many milliseconds |
| 89 | -F FILTER, --filter FILTER |
| 90 | display only GCs whose description contains this text |
Sasha Goldshtein | ea77193 | 2016-10-29 13:20:52 -0700 | [diff] [blame] | 91 | |
| 92 | examples: |
Paul Chaignon | 4bb6d7f | 2017-03-30 19:05:40 +0200 | [diff] [blame^] | 93 | ./ugc -l java 185 # trace Java GCs in process 185 |
| 94 | ./ugc -l ruby 1344 -m # trace Ruby GCs reporting in ms |
| 95 | ./ugc -M 10 -l java 185 # trace only Java GCs longer than 10ms |