| .TH ustat 8 "2016-11-07" "USER COMMANDS" |
| .SH NAME |
| ustat \- Activity stats from high-level languages. |
| .SH SYNOPSIS |
| .B ustat [-l {java,python,ruby,node,php}] [-C] [-S {cload,excp,gc,method,objnew,thread}] [-r MAXROWS] [-d] [interval [count]] |
| .SH DESCRIPTION |
| This is "top" for high-level language events, such as garbage collections, |
| exceptions, thread creations, object allocations, method calls, and more. The |
| events are aggregated for each process and printed in a top-like table, which |
| can be sorted by various fields. |
| |
| This uses in-kernel eBPF maps to store per process summaries for efficiency. |
| |
| This tool relies on USDT probes embedded in many high-level languages, such as |
| Node, Java, Python, Ruby, and PHP. It requires a runtime instrumented with these |
| probes, which in some cases requires building from source with a USDT-specific |
| flag, such as "--enable-dtrace" or "--with-dtrace". For Java, some probes are |
| not enabled by default, and can be turned on by running the Java process with |
| the "-XX:+ExtendedDTraceProbes" flag. For PHP processes, the environment |
| variable USE_ZEND_DTRACE must be set to 1. |
| |
| Newly-created processes will only be traced at the next interval. If you run |
| this tool with a short interval (say, 1-5 seconds), this should be virtually |
| unnoticeable. For longer intervals, you might miss processes that were started |
| and terminated during the interval window. |
| |
| Since this uses BPF, only the root user can use this tool. |
| .SH REQUIREMENTS |
| CONFIG_BPF and bcc. |
| .SH OPTIONS |
| .TP |
| \-l {java,python,ruby,node,php} |
| The language to trace. By default, all languages are traced. |
| .TP |
| \-C |
| Do not clear the screen between updates. |
| .TP |
| \-S {cload,excp,gc,method,objnew,thread} |
| Sort the output by the specified field. |
| .TP |
| \-r MAXROWS |
| Do not print more than this number of rows. |
| .TP |
| \-d |
| Print the resulting BPF program, for debugging purposes. |
| .TP |
| interval |
| Interval between updates, seconds. |
| .TP |
| count |
| Number of interval summaries. |
| .SH EXAMPLES |
| .TP |
| Summarize activity in high-level languages, 1 second refresh: |
| # |
| .B ustat |
| .TP |
| Don't clear the screen, and top 8 rows only: |
| # |
| .B ustat -Cr 8 |
| .TP |
| 5 second summaries, 10 times only: |
| # |
| .B ustat 5 10 |
| .SH FIELDS |
| .TP |
| loadavg |
| The contents of /proc/loadavg |
| .TP |
| PID |
| Process ID. |
| .TP |
| CMDLINE |
| Process command line (often the second and following arguments will give you a |
| hint as to which application is being run. |
| .TP |
| METHOD/s |
| Count of method invocations during interval. |
| .TP |
| GC/s |
| Count of garbage collections during interval. |
| .TP |
| OBJNEW/s |
| Count of objects allocated during interval. |
| .TP |
| CLOAD/s |
| Count of classes loaded during interval. |
| .TP |
| EXC/s |
| Count of exceptions thrown during interval. |
| .TP |
| THR/s |
| Count of threads created during interval. |
| .SH OVERHEAD |
| When using this tool with high-frequency events, such as method calls, a very |
| significant slow-down can be expected. However, many of the high-level |
| languages covered by this tool already have a fairly high per-method invocation |
| cost, especially when running in interpreted mode. For the lower-frequency |
| events, such as garbage collections or thread creations, the overhead should |
| not be significant. Specifically, when probing Java processes and not using the |
| "-XX:+ExtendedDTraceProbes" flag, the most expensive probes are not emitted, |
| and the overhead should be acceptable. |
| .SH SOURCE |
| This is from bcc. |
| .IP |
| https://github.com/iovisor/bcc |
| .PP |
| Also look in the bcc distribution for a companion _example.txt file containing |
| example usage, output, and commentary for this tool. |
| .SH OS |
| Linux |
| .SH STABILITY |
| Unstable - in development. |
| .SH AUTHOR |
| Sasha Goldshtein |
| .SH SEE ALSO |
| trace(8), argdist(8), tplist(8) |