import{_ as r,a as t}from"./arthas-output-svg.30f64f53.js";import{_ as l,o as d,c,a as e,b as n,e as a,d as i,r as o}from"./app.4d248835.js";const p={},u=e("h1",{id:"profiler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#profiler","aria-hidden":"true"},"#"),a(" profiler")],-1),h={href:"https://arthas.aliyun.com/3.x/doc/arthas-tutorials.html?language=cn&id=command-profiler",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"profiler",-1),v=a("\u5728\u7EBF\u6559\u7A0B"),b={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"\u63D0\u793A",-1),g=a("\u4F7F\u7528"),_={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},x=a("async-profiler"),k=a("\u751F\u6210\u706B\u7130\u56FE"),y=i(`
profiler
\u547D\u4EE4\u652F\u6301\u751F\u6210\u5E94\u7528\u70ED\u70B9\u7684\u706B\u7130\u56FE\u3002\u672C\u8D28\u4E0A\u662F\u901A\u8FC7\u4E0D\u65AD\u7684\u91C7\u6837\uFF0C\u7136\u540E\u628A\u6536\u96C6\u5230\u7684\u91C7\u6837\u7ED3\u679C\u751F\u6210\u706B\u7130\u56FE\u3002
profiler
\u547D\u4EE4\u57FA\u672C\u8FD0\u884C\u7ED3\u6784\u662F profiler action [actionArg]
\u53C2\u6570\u540D\u79F0 | \u53C2\u6570\u8BF4\u660E |
---|---|
action | \u8981\u6267\u884C\u7684\u64CD\u4F5C |
actionArg | \u5C5E\u6027\u540D\u6A21\u5F0F |
[i:] | \u91C7\u6837\u95F4\u9694\uFF08\u5355\u4F4D\uFF1Ans\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A10'000'000\uFF0C\u5373 10 ms\uFF09 |
[f:] | \u5C06\u8F93\u51FA\u8F6C\u50A8\u5230\u6307\u5B9A\u8DEF\u5F84 |
[d:] | \u8FD0\u884C\u8BC4\u6D4B\u6307\u5B9A\u79D2 |
[e:] | \u8981\u8DDF\u8E2A\u54EA\u4E2A\u4E8B\u4EF6\uFF08cpu, alloc, lock, cache-misses \u7B49\uFF09\uFF0C\u9ED8\u8BA4\u662F cpu |
$ profiler start
Started [cpu] profiling
\u63D0\u793A
\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u751F\u6210\u7684\u662F cpu \u7684\u706B\u7130\u56FE\uFF0C\u5373 event \u4E3Acpu
\u3002\u53EF\u4EE5\u7528--event
\u53C2\u6570\u6765\u6307\u5B9A\u3002
$ profiler getSamples
23
$ profiler status
[cpu] profiling is running for 4 seconds
\u53EF\u4EE5\u67E5\u770B\u5F53\u524D profiler \u5728\u91C7\u6837\u54EA\u79CDevent
\u548C\u91C7\u6837\u65F6\u95F4\u3002
\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u7ED3\u679C\u6587\u4EF6\u662Fhtml
\u683C\u5F0F\uFF0C\u4E5F\u53EF\u4EE5\u7528--format
\u53C2\u6570\u6307\u5B9A\uFF1A
$ profiler stop --format html
profiler output file: /tmp/test/arthas-output/20211207-111550.html
OK
\u6216\u8005\u5728--file
\u53C2\u6570\u91CC\u7528\u6587\u4EF6\u540D\u6307\u540D\u683C\u5F0F\u3002\u6BD4\u5982--file /tmp/result.html
\u3002
\u70B9\u51FB\u53EF\u4EE5\u67E5\u770B\u5177\u4F53\u7684\u7ED3\u679C\uFF1A
\u63D0\u793A
\u5982\u679C\u662F chrome \u6D4F\u89C8\u5668\uFF0C\u53EF\u80FD\u9700\u8981\u591A\u6B21\u5237\u65B0\u3002
\u5728\u4E0D\u540C\u7684\u5E73\u53F0\uFF0C\u4E0D\u540C\u7684 OS \u4E0B\u9762\uFF0C\u652F\u6301\u7684 events \u5404\u6709\u4E0D\u540C\u3002\u6BD4\u5982\u5728 macos \u4E0B\u9762\uFF1A
$ profiler list
Basic events:
cpu
alloc
lock
wall
itimer
\u5728 linux \u4E0B\u9762
$ 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
\u53EF\u4EE5\u7528--event
\u53C2\u6570\u6307\u5B9A\u8981\u91C7\u6837\u7684\u4E8B\u4EF6\uFF0C\u6BD4\u5982\u5BF9alloc
\u4E8B\u4EF6\u8FDB\u5165\u91C7\u6837\uFF1A
$ profiler start --event alloc
$ profiler resume
Started [cpu] profiling
start
\u548Cresume
\u7684\u533A\u522B\u662F\uFF1Astart
\u662F\u65B0\u5F00\u59CB\u91C7\u6837\uFF0Cresume
\u4F1A\u4FDD\u7559\u4E0A\u6B21stop
\u65F6\u7684\u6570\u636E\u3002
\u901A\u8FC7\u6267\u884Cprofiler getSamples
\u53EF\u4EE5\u67E5\u770B samples \u7684\u6570\u91CF\u6765\u9A8C\u8BC1\u3002
execute
\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4\u6BD4\u5982\u5F00\u59CB\u91C7\u6837\uFF1A
profiler execute 'start,framebuf=5000000'
\u505C\u6B62\u91C7\u6837\uFF0C\u5E76\u4FDD\u5B58\u5230\u6307\u5B9A\u6587\u4EF6\u91CC\uFF1A
profiler execute 'stop,file=/tmp/result.html'
$ profiler actions
Supported Actions: [resume, dumpCollapsed, getSamples, start, list, execute, version, stop, load, dumpFlat, actions, dumpTraces, status]
$ profiler version
Async-profiler 1.6 built on Sep 9 2019
Copyright 2019 Andrei Pangin
\u5982\u679C\u9047\u5230\u751F\u6210\u7684\u706B\u7130\u56FE\u6709
[frame_buffer_overflow]
\uFF0C\u5219\u9700\u8981\u589E\u5927 framebuf\uFF08\u9ED8\u8BA4\u503C\u662F 1'000'000\uFF09\uFF0C\u53EF\u4EE5\u663E\u5F0F\u914D\u7F6E\uFF0C\u6BD4\u5982\uFF1A
profiler start --framebuf 5000000
\u5982\u679C\u5E94\u7528\u6BD4\u8F83\u590D\u6742\uFF0C\u751F\u6210\u7684\u5185\u5BB9\u5F88\u591A\uFF0C\u60F3\u53EA\u5173\u6CE8\u90E8\u5206\u6570\u636E\uFF0C\u53EF\u4EE5\u901A\u8FC7 include/exclude \u6765\u8FC7\u6EE4\u3002\u6BD4\u5982
profiler start --include 'java/*' --include 'demo/*' --exclude '*Unsafe.park*'
include/exclude \u90FD\u652F\u6301\u8BBE\u7F6E\u591A\u4E2A\u503C \uFF0C\u4F46\u662F\u9700\u8981\u914D\u7F6E\u5728\u547D\u4EE4\u884C\u7684\u6700\u540E\u3002
\u6BD4\u5982\uFF0C\u5E0C\u671B profiler \u6267\u884C 300 \u79D2\u81EA\u52A8\u7ED3\u675F\uFF0C\u53EF\u4EE5\u7528 -d
/--duration
\u53C2\u6570\u6307\u5B9A\uFF1A
profiler start --duration 300
\u6CE8\u610F\uFF0Cjfr \u53EA\u652F\u6301\u5728
start
\u65F6\u914D\u7F6E\u3002\u5982\u679C\u662F\u5728stop
\u65F6\u6307\u5B9A\uFF0C\u5219\u4E0D\u4F1A\u751F\u6548\u3002
profiler start --file /tmp/test.jfr
file
\u53C2\u6570\u652F\u6301\u4E00\u4E9B\u53D8\u91CF\uFF1A
--file /tmp/test-%t.jfr
--file /tmp/test-%p.jfr
\u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A