Demonstrations of uobjnew. uobjnew summarizes new object allocation events and prints out statistics on which object type has been allocated frequently, and how many bytes of that type have been allocated. This helps diagnose common allocation paths, which can in turn cause heavy garbage collection. For example, trace Ruby object allocations when running some simple commands in irb (the Ruby REPL): # ./uobjnew -l ruby 27245 Tracing allocations in process 27245 (language: ruby)... Ctrl-C to quit. TYPE # ALLOCS # BYTES NameError 1 0 RubyToken::TkSPACE 1 0 RubyToken::TkSTRING 1 0 String 7 0 RubyToken::TkNL 2 0 RubyToken::TkIDENTIFIER 2 0 array 55 129 string 344 1348 ^C Plain C/C++ allocations (through "malloc") are also supported. We can't report the type being allocated, but we can report the object sizes at least. Also, print only the top 10 rows by number of bytes allocated: # ./uobjnew -S 10 -l c 27245 Tracing allocations in process 27245 (language: c)... Ctrl-C to quit. TYPE # ALLOCS # BYTES block size 64 22 1408 block size 992 2 1984 block size 32 68 2176 block size 48 48 2304 block size 944 4 3776 block size 1104 4 4416 block size 160 32 5120 block size 535 15 8025 block size 128 112 14336 block size 80 569 45520 ^C USAGE message: # ./uobjnew -h usage: uobjnew.py [-h] [-l {c,java,ruby,tcl}] [-C TOP_COUNT] [-S TOP_SIZE] [-v] pid [interval] Summarize object allocations in high-level languages. positional arguments: pid process id to attach to interval print every specified number of seconds optional arguments: -h, --help show this help message and exit -l {c,java,ruby,tcl}, --language {c,java,ruby,tcl} language to trace -C TOP_COUNT, --top-count TOP_COUNT number of most frequently allocated types to print -S TOP_SIZE, --top-size TOP_SIZE number of largest types by allocated bytes to print -v, --verbose verbose mode: print the BPF program (for debugging purposes) examples: ./uobjnew -l java 145 # summarize Java allocations in process 145 ./uobjnew -l c 2020 1 # grab malloc() sizes and print every second ./uobjnew -l ruby 6712 -C 10 # top 10 Ruby types by number of allocations ./uobjnew -l ruby 6712 -S 10 # top 10 Ruby types by total size