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\u8BF4\u660E

\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

\u542F\u52A8 profiler

$ 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

\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684 sample \u7684\u6570\u91CF

$ profiler getSamples
23

\u67E5\u770B profiler \u72B6\u6001

$ 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

\u505C\u6B62 profiler

\u751F\u6210 html \u683C\u5F0F\u7ED3\u679C

\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

\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762\u7684 profiler \u7ED3\u679C

`,18),j=a("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u4F7F\u7528 3658 \u7AEF\u53E3\uFF0C\u5219\u53EF\u4EE5\u6253\u5F00\uFF1A "),S={href:"http://localhost:3658/arthas-output/",target:"_blank",rel:"noopener noreferrer"},$=a("http://localhost:3658/arthas-output/"),w=a(" \u67E5\u770B\u5230"),L=e("code",null,"arthas-output",-1),q=a("\u76EE\u5F55\u4E0B\u9762\u7684 profiler \u7ED3\u679C\uFF1A"),B=i('

\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

profiler \u652F\u6301\u7684 events

\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
`,9),A=a("\u5982\u679C\u9047\u5230 OS \u672C\u8EAB\u7684\u6743\u9650/\u914D\u7F6E\u95EE\u9898\uFF0C\u7136\u540E \b \u7F3A\u5C11\u90E8\u5206 event\uFF0C\u53EF\u4EE5\u53C2\u8003"),C=e("code",null,"async-profiler",-1),N=a("\u672C\u8EAB\u6587\u6863\uFF1A"),V={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},E=a("async-profiler"),I=i(`

\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

\u6062\u590D\u91C7\u6837

$ 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

\u4F7F\u7528execute\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'
`,11),O=a("\u5177\u4F53\u7684\u683C\u5F0F\u53C2\u8003\uFF1A "),P={href:"https://github.com/jvm-profiling-tools/async-profiler/blob/v2.5/src/arguments.cpp#L50",target:"_blank",rel:"noopener noreferrer"},T=a("arguments.cpp"),D=i(`

\u67E5\u770B\u6240\u6709\u652F\u6301\u7684 action

$ profiler actions
Supported Actions: [resume, dumpCollapsed, getSamples, start, list, execute, version, stop, load, dumpFlat, actions, dumpTraces, status]

\u67E5\u770B\u7248\u672C

$ profiler version
Async-profiler 1.6 built on Sep  9 2019
Copyright 2019 Andrei Pangin

\u914D\u7F6E framebuf \u53C2\u6570

\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

\u914D\u7F6E include/exclude \u6765\u8FC7\u6EE4\u6570\u636E

\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

\u6307\u5B9A\u6267\u884C\u65F6\u95F4

\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

\u751F\u6210 jfr \u683C\u5F0F\u7ED3\u679C

\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

\u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A

\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684 unknown

`,23);function J(K,F){const s=o("ExternalLinkIcon");return d(),c("div",null,[u,e("p",null,[e("a",h,[m,v,n(s)])]),e("div",b,[f,e("p",null,[g,e("a",_,[x,n(s)]),k])]),y,e("p",null,[j,e("a",S,[$,n(s)]),w,L,q]),B,e("p",null,[A,C,N,e("a",V,[E,n(s)])]),I,e("p",null,[O,e("a",P,[T,n(s)])]),D])}const z=l(p,[["render",J],["__file","profiler.html.vue"]]);export{z as default};