logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

uflow, javaflow, perlflow, phpflow, pythonflow, rubyflow, tclflow - Print a flow graph of method calls in

Author

       Sasha Goldshtein

Description

       uflow  traces  method calls and prints them in a flow graph that can facilitate debugging and diagnostics
       by following the program's execution (method flow).

       This tool relies on USDT probes embedded in many high-level languages, such as Java, Perl,  PHP,  Python,
       Ruby,  and  Tcl.  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
       processes,  the  startup flag "-XX:+ExtendedDTraceProbes" is required. For PHP processes, the environment
       variable USE_ZEND_DTRACE must be set to 1.

       Since this uses BPF, only the root user can use this tool.

Examples

       Follow method flow in a Ruby process:
              # uflowruby148

       Follow method flow in a Java process where the class name is java.lang.Thread:
              # uflow-Cjava/lang/Threadjava1802

Fields

       CPU    The CPU number on which the method was invoked. This is useful to  easily  see  where  the  output
              skips to a different CPU.

       PID    The process id.

       TID    The thread id.

       TIME   The duration of the method call.

       METHOD The method name.

Name

       uflow, javaflow, perlflow, phpflow, pythonflow, rubyflow, tclflow - Print a flow graph of method calls in
       high-level languages.

Options

       -M METHOD
              Print only method calls where the method name begins with this string.

       -C CLAZZ
              Print  only  method  calls  where  the  class  name  begins  with  this  string.  The  class  name
              interpretation    strongly    depends    on    the    language.   For   example,   in   Java   use
              "package/subpackage/ClassName" to refer to classes.

       -v     Print the resulting BPF program, for debugging purposes.

       {java,perl,php,python,ruby,tcl}
              The language to trace.

       pid    The process id to trace.

Os

       Linux

Overhead

       This  tool has extremely high overhead because it prints every method call. For some scenarios, you might
       see lost samples in the output as the tool is unable to keep up with the rate of  data  coming  from  the
       kernel.  Filtering  by  class  or  method prefix can help reduce the amount of data printed, but there is
       still a very high overhead in the collection mechanism. Do not use for performance- sensitive  production
       scenarios, and always test first.

Requirements

       CONFIG_BPF and bcc.

See Also

trace(8), ustat(8)

USER COMMANDS                                      2018-10-09                                           uflow(8)

Source

       This is from bcc.

              https://github.com/iovisor/bcc

       Also look in the bcc distribution for a companion _example.txt file containing example usage, output, and
       commentary for this tool.

Stability

       Unstable - in development.

Synopsis

javaflow[-h][-MMETHOD][-CCLAZZ][-v]pidperlflow[-h][-MMETHOD][-CCLAZZ][-v]pidphpflow[-h][-MMETHOD][-CCLAZZ][-v]pidpythonflow[-h][-MMETHOD][-CCLAZZ][-v]pidrubyflow[-h][-MMETHOD][-CCLAZZ][-v]pidtclflow[-h][-MMETHOD][-CCLAZZ][-v]piduflow[-h][-MMETHOD][-CCLAZZ][-v][-l{java,perl,php,python,ruby,tcl}]pid

See Also