4.3 KiB
Generate a flame graph using async-profiler
The profiler
command supports generate flame graph for application hotspots.
The basic usage of the profiler
command is profiler action [actionArg]
Supported Options
Name | Specification |
---|---|
action | Action to execute |
actionArg | Attribute name pattern |
[i:] | sampling interval in ns (default: 10'000'000, i.e. 10 ms) |
[f:] | dump output to specified directory |
[d:] | run profiling for specified seconds |
[e:] | which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu |
View all supported actions
profiler actions
{{execute T2}}
$ profiler actions
Supported Actions: [resume, dumpCollapsed, getSamples, start, list, execute, version, stop, load, dumpFlat, actions, dumpTraces, status]
View version
profiler version
{{execute T2}}
$ profiler version
Async-profiler 1.6 built on Sep 9 2019
Copyright 2019 Andrei Pangin
Start profiler
profiler start -e itimer
{{execute T2}}
$ profiler start
Started [cpu] profiling
By default, the sample event is
cpu
. Can be specified with the--event
parameter. Since katacoda environment doesn't supportperf_events
,here use-e itimer
to specify event to beitimer
Get the number of samples collected
profiler getSamples
{{execute T2}}
$ profiler getSamples
23
View profiler status
profiler status
{{execute T2}}
$ profiler status
[cpu] profiling is running for 4 seconds
Can view which event
and sampling time.
Stop profiler
Generating html format results
By default, the result file is html
format. You can also specify it with the --format
parameter:
profiler stop --format html
{{execute T2}}
$ profiler stop --format html
profiler output file: /tmp/test/arthas-output/20211207-111550.html
OK
Or use the file name name format in the --file
parameter. For example, --file /tmp/result.html
.
profiler stop --file /tmp/result.html
{{execute T2}}
View profiler results under arthas-output via browser
By default, arthas uses http port 8563, which can be opened: https://HOST_SUBDOMAIN-8563-KATACODA_HOST.environments.katacoda.com/arthas-output/ View the arthas-output
directory below Profiler results:
Click to view specific results:
If using the chrome browser, may need to be refreshed multiple times.
Profiler supported events
profiler list
{{execute T2}}
Under different platforms and different OSs, the supported events are different. For example, under macos:
$ profiler list
Basic events:
cpu
alloc
lock
wall
itimer
Under linux
$ profiler list
Basic events:
cpu
alloc
lock
wall
itimer
Perf events:
page-faults
context-switches
cycles
instructions
cache-references
cache-misses
branches
branch-misses
bus-cycles
L1-dcache-load-misses
LLC-load-misses
dTLB-load-misses
mem:breakpoint
trace:tracepoint
If you encounter the permissions/configuration issues of the OS itself and then missing some events, you can refer to the async-profiler documentation.
You can use the --event
parameter to specify the event to sample, such as sampling the alloc
event:
profiler start --event alloc
{{execute T2}}
$ profiler start --event alloc
Resume sampling
profiler resume
{{execute T2}}
$ profiler resume
Started [cpu] profiling
The difference between start
and resume
is: start
is the new start sampling, resume
will retain the data of the last stop
.
You can verify the number of samples by executing profiler getSamples
.
Use execute
action to execute complex commands
profiler execute 'start,framebuf=5000000'
{{execute T2}}
For example, start sampling:
profiler execute 'start,framebuf=5000000'
Stop sampling and save to the specified file:
profiler execute 'stop,file=/tmp/result.html'
{{execute T2}}
profiler execute 'stop,file=/tmp/result.html'
Specific format reference: arguments.cpp