《楊龍-Java性能剖析技術詳解-Final.pdf》由會員分享,可在線閱讀,更多相關《楊龍-Java性能剖析技術詳解-Final.pdf(38頁珍藏版)》請在三個皮匠報告上搜索。
1、Java性能剖析技術詳解演講人:楊龍Alibaba DragonwellCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023性能剖析簡介性能剖
2、析工具概覽Java Flight Recorderasync-profiler性能剖析實踐CONTENT目錄CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJava
3、Week 2023性能剖析簡介1CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023性能剖析是一種為了改善程序性能,從運行狀態的程序中收集數據
4、并分析的方法常見的性能維度有:Time、CPU、Memory Allocation、IO、Lock等CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
5、 2023性能剖析工具概覽2CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CounterEventsInstrumentationSam
6、plingjstat hsperfdataVisualVM JMXLoggingasync-profiler JVMTIJFR JVM InternalJVMTI async-profilerAPM JavaagentJFR JVM Internal jstack async-profiler JVMTIasync-profiler JVM APIparca eBPFJFR JVM Internal VisualVM JMX safepoint biasednotsafepoint biasedCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 202
7、3CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Java Flight Recorder3CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJa
8、vaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR歷史JRockit Flight RecorderBEA SystemsOracle acquired SunrebrandedJava Flight RecorderOracleOpen source JFROpenJDK 11A
9、libaba+RedHatBackport JFR toOpenJDK 8u2622010 2008 Oracle acquired BEA20182020JFR StreamingJDK 142020CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
10、 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR使用方式-創建記錄啟動參數Command LineJava Code-XX:StartFlightRecording=duration=10s,filename=/path/to/profile.jfr,settings=profile-XX:FlightRecorderOptions=memorysize=10m,stackdepth=64-XX:+LogJFR/Java 8-Xlog:jfr=debug/java 11-XX:-FlightRecorder/禁用JFR$JA
11、VA_HOME/bin/jcmd 16014 JFR.start name=test settings=profile$JAVA_HOME/bin/jcmd 16014 JFR.check$JAVA_HOME/bin/jcmd 16014 JFR.configure stackdepth=64$JAVA_HOME/bin/jcmd 16014 JFR.dump name=test filename=/tmp/profile.jfr$JAVA_HOME/bin/jcmd 16014 JFR.stop name=testpublic static void main(String args)thr
12、ows Exception Configuration recordingConfig=Configuration.getConfiguration(default);Recording recording=new Recording(recordingConfig);recording.setName(test);recording.setMaxAge(Duration.ofSeconds(120);recording.setMaxSize(1024*1024);recording.start();Thread.sleep(1000);Path p=Files.createTempFile(
13、profile,.jfr).getFileName();recording.dump(p);recording.stop();CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 202
14、3CoreJavaWeek 2023JFR使用方式-解析public static void main(String args)throws Exception Path p=Paths.get(/path/to/profile.jfr);try(RecordingFile file=new RecordingFile(p)while(file.hasMoreEvents()RecordedEvent e=file.readEvent();String eventName=e.getEventType().getName();System.out.println(eventName);$JAV
15、A_HOME/bin/jfr summary profile.jfr$JAVA_HOME/bin/jfr print-events jdk.ExecutionSample profile.jfrJDK Mission ControlCommand LineJava CodeCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWe
16、ek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR整體設計EventRuntimeCompilerGCJFRJava APIEventEventEventThread BufferGlobal BufferGlobal BufferGlobal BufferGlobal BufferGlobal BufferGlobal Bufferrecording.jfrChunk 1Chunk 2Chunk 3Chunk NHeaderMetadataConstan
17、t PoolEventsCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR事件類型概覽 JFR Recording JFR Setti
18、ng Allocation File IO Socket IO Lock Wait Thread Start Thread Sleep JVM Information Class Loading Code Cache Compiler Flag GC Profiling Safepoint VM Operation Memory Network Process CPU Load Thread CPU Load OS Information Setting Flag Thread Start CPU Load GC Socket IO Compiling Safepoint VM Operati
19、on Lock Wait Thread Execution Thread Dump Flight RecorderJava ApplicationJVMOperating SystemInstant EventDuration EventSample EventCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 202
20、3CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR-CPU熱點Sample 1a()b()Sample 2a()c()Sample 3a()b()Sample 4a()b()1 signalJfrThreadSamplerJava Thread2 signal handler:block current thread3 walk stack4 JFR eventCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Cor
21、eJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR-內存申請熱點Java ThreadTLABShared SpaceObjectAllocationInNewTLABEvent ThreadStart TimeAllocation Size
22、Object classStack TraceTLAB SizeObjectAllocationOutsideTLABEvent ThreadStart TimeAllocation SizeObject classStack Trace在內存申請很頻繁的應用中事件數量很多,JFR文件較大每個事件都要生成方法棧,開銷偏大OpenJDK 16,JFR實現了新內存剖析功能,可控制事件數量和開銷 https:/bugs.openjdk.org/browse/JDK-8257602 ObjectAllocationSample如果未使用TLAB(-XX:-UseTLAB),則無法剖析CoreJavaW
23、eek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR-內存泄露剖析Java ThreadTLABpriority queue大堆(超過50G)Heapdu
24、mp很慢,也有可能無法打開Heapdump文件JDK 10,JFR新增了OldObjectSample事件,旨在解決上述問題,不用Heapdump也能定位根因week refGCLeakOldObjectSampleEvent ThreadStart TimeDurationArray ElementsHeap UsageObject Stack TraceGC RootOldObjectSampleEvent ThreadStart TimeDurationArray ElementsHeap UsageObject Stack TraceGC RootCoreJavaWeek 2023Co
25、reJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR-鎖熱點剖析ObjectMonitor:enter()EventJavaMonitorEnter event;do_ent
26、er();if(event.should_commit()mit();bool should_commit()return is_enabled();void commit()set_endtime(JfrTicks:now();if(_end_time-_start_time)=JfrEventSetting:threshold)write_event();true true 20 msUnsafe_Park()EventThreadPark event;do_park();if(event.should_commit()mit();true true 20 msvoid synchroni
27、zed .reentrantLock.lock()JavaMonitorEnterEvent ThreadStart TimeDurationMonitor AddressMonitor ClassPrevious Monitor OwnerThreadParkEvent ThreadStart TimeDurationCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Cor
28、eJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR-Socket/File IO 熱點剖析jcmd 12197 JFR.start name=testjdk.jfr.internal.instrument.FileChannelImplInstrumentor.javajdk.jfr.internal.instrument.FileInputStreamInstrumentor.javajdk.jfr.int
29、ernal.instrument.FileOutputStreamInstrumentor.javajdk.jfr.internal.instrument.RandomAccessFileInstrumentor.javajdk.jfr.internal.instrument.SocketChannelImplInstrumentor.javajdk.jfr.internal.instrument.SocketInputStreamInstrumentor.javajdk.jfr.internal.instrument.SocketOutputStreamInstrumentor.java第一
30、次啟動JFR有可能會引起JIT退優化,導致應用性能下降JIInstrumentationTarget(sun.nio.ch.SocketChannelImpl)final class SocketChannelImplInstrumentor JIInstrumentationMethod public int read(ByteBuffer dst)throws IOException SocketReadEvent event=SocketReadEvent.EVENT.get();if(!event.isEnabled()return read(dst);int bytesRead=0;
31、try event.begin();bytesRead=read(dst);finally event.end();if(event.shouldCommit()mit();event.reset();return bytesRead;CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
32、 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR性能開銷 Test:Benchmark OS:Linux version 3.10.0-1160.80.1.el7.x86_64,gcc version 4.8.5 CPU:vCore 24,x86_64,Intel(R)Xeon(R)Platinum 8369B CPU 2.70GHz Memory:24G JDK:OpenJDK 64-Bit Server VM(build 25.362-b08,mixed mode)Flags:-XX:+
33、UseConcMarkSweepGC-Xmx10g-Xmn5g-XX:MaxMetaspaceSize=512m-Xloggc:gc.log-XX:+PrintGCDetails-XX:+PrintGCDateStamps -XX:-UseMembar/-XX:+UseMembar Standard profiling recording using the default settings 2%.https:/ 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Co
34、reJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR最佳實踐 JDK 8,如果Java線程數較多(比如500以上),CPU熱點剖析可能開銷比較大,且和線程數正相關;JDK 8和JDK 11,內存分配熱點剖析的事件數量可能很多,創建事件時爬棧的開銷較大,內存分配較快的應用不建議開啟 https:/bugs.openjdk.org/browse/
35、JDK-8257602 JDK 11.0.7以前,內存泄露剖析功能可能導致JFR文件體積很大,不建議打開 https:/bugs.openjdk.org/browse/JDK-8225797 第一次開啟JFR,有可能會導致JIT退優化,導致應用性能抖動 建議增加-XX:+UseMembar參數切換到更高性能的實現,可規避此問題 https:/bugs.openjdk.org/browse/JDK-8187812(JDK 10開始已經默認打開)CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaW
36、eek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler4CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJ
37、avaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler使用方式Command LineJava Code CPU熱點bash profiler.sh e cpu d 60 f profile.html javapid 內存申請熱點bash profiler.sh-alloc 500k d 60 f profile.html ja
38、vapidAsyncProfiler profiler=AsyncProfiler.getInstance(/path/libasyncprofiler.so);profiler.execute(start,jfr=7,event=cpu,interval=10ms,file=profile.html);profiler.stop();java-agentpath:/path/to/libasyncpprofiler.so=start,event=cpu,file=profile.html jar javaagentCoreJavaWeek 2023CoreJavaWeek 2023CoreJ
39、avaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler CPU熱點剖析Java CodejavaagentJVMCollected Heaplibasyncprofiler.soOperatin
40、g System4 signaljattachBufferJFRTextRuntimeJVMTIJNICompilerJVM API5 ring buffertimersignal handlercallbackHTMLCollapsedJava API2 perf_event_openlib parserHigh PerformanceNo need-XX:+PreserveFramePointerperf_event_open/proc/sys/kernel/perf_event_paranoid 2Container:seccomp enable perf_event_openAsync
41、GetCallTracehttps:/ 670 start89Full Stack TraceKernel+Native+JavaCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2
42、023CoreJavaWeek 2023async-profiler 內存申請熱點剖析push%rbpmov%rsp,%rbpsub$0 xb0,%rsp0 xccnew Object()send_allocation_in_new_tlab()send JFR eventAllocate Object from TLABnew Object()TLAB allocation callbackSIGTRAPAllocate Object from TLABsignal handlerJVMTI GetStackTraceRecord Sample in async-profilersend_a
43、llocation_in_new_tlab()send_allocation_in_new_tlab()ObjectAllocationInNewTLABEvent ThreadStart TimeAllocation SizeObject classStack TraceTLAB SizeInstruction Replace0XCC Software BreakpointJDK 7u40+send_allocation_in_new_tlab()send_allocation_outside_tlab()Need JDK debug symbolsdebuginfo-install-y j
44、ava-1.8.0-openjdkSupport Overhead Control-alloc 500kSupport XX:-UseTLAB on JDK 11JVMTI SampledObjectAllochttps:/openjdk.org/jeps/331JVMTI GetStackTracehttps:/ 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023C
45、oreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler 墻鐘熱點剖析是CPU熱點剖析的有力補充Running+Blocking+SleepingOverhead ControlThread FilterTHREADS_PER_TICK=8Java ThreadTimerSample 1a()b()Sample 2a()c()Sample 3a()b()b()Signal handlerJVM APICoreJavaWee
46、k 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler 鎖爭搶熱點剖析Support 2 Lock Typessynchronized+j
47、ucsynchronized JVMTIasync-profiler callbackObjectMonitor:enterRecord start timeJVMTIasync-profiler callbackJVMTIdo enterCreate EventJavaMonitorEnterEvent ThreadStart TimeDurationMonitor AddressMonitor ClassPrevious Monitor OwnerRrentrantLock.lock()Record start timeUnsafe.park()Unsafe_Park()Rrentrant
48、Lock.lock()Unsafe.park()Unsafe_Park_Hook()Unsafe_Park()Create EventJVMTIThreadParkEvent ThreadStart TimeDurationCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023C
49、oreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023async-profiler 性能開銷 Test:Benchmark OS:5.4.0-90-generic#101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux CPU:16 cores,Intel(R)Xeon(R)Platinum 8369B CPU 2.70GHz Memory:64G JDK:1.8.0_312Async Profiler:2.6 Flags
50、:-XX:+UseConcMarkSweepGC-Xmx10g-Xmn5g-XX:MaxMetaspaceSize=512m-Xloggc:gc.log-XX:+PrintGCDetails-XX:+PrintGCDateStampsCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
51、2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023JFR 和 async-profiler 的對比async-profilerJava Flight Recorder數據豐富度包含最常用功能豐富程度高CPU支持內核+Native+Java棧,需要權限包含所有線程(Java+GC+Compiler+VM)在所有Java版本上開銷都低??赡懿粶士赡芤餔VM Crash支持僅Java棧,開箱即用僅Java線程在JDK8上開銷較高棧比較準確穩定內存申請支持事件數量可控,開銷可控依賴JDK調試符號有可能導致J
52、VM crash支持8和11上,事件數量不可控,開銷不可控開箱即用社區在不斷維護內存泄露剖析支持支持在JDK8上JFR文件體積較大,11上已修復鎖爭搶熱點支持支持文件/Socket IO無原生支持支持有可能引起JIT性能退化墻鐘支持無原生支持CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaW
53、eek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023性能剖析實踐5CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
54、2023CoreJavaWeek 2023CoreJavaWeek 2023單次剖析perf+perf-map-agentInstall perfInstall perf-map-agentSet-XX:+PreserveFramePointerProfile Java Dump symbolsGenerate Mixed-Mode Flame Graphasync-profilerInstall async-profilerProfile JavaGenerate Mixed-Mode Flame GraphJava Flight RecorderProfile JavaRead JFR(J
55、DK Mission Control)未剖析時沒有開銷或開銷較低 如果未及時觸發剖析,有可能錯過問題現場 不是連續剖析,沒有完整應用性能數據,無法進行程序畫像持續性能剖析CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWee
56、k 2023CoreJavaWeek 2023CoreJavaWeek 2023持續性能剖析CollectStorageVisualizeJavaJFR/async-profilerGopprofPHPphpspyeBPFProfilingDatalanguage neutral formatAnalyzerFormatConverterAggregateK/VDatabaseJava Query APIUser End在生產環境低開銷的持續記錄,支持定位任意時刻性能問題CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWee
57、k 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023depth=0start time=00:00:00duration=60 sdepth=0start time=00:09:00duration=60 sdepth=1start time=00:00:00dur
58、ation=600 s1103 92 9depth=0start time=01:30:00duration=60 sdepth=0start time=01:39:00duration=60 sdepth=1start time=01:30:00duration=600 s1102 9depth=2start time=00:00:00duration=6000 s110depth=0start time=15:00:00duration=60 sdepth=0start time=15:09:00duration=60 sdepth=1start time=15:00:00duration
59、=600 s1102 92 9depth=0start time=16:30:00duration=60 sdepth=0start time=16:39:00duration=60 sdepth=1start time=16:30:00duration=600 s1102 9depth=2start time=15:00:00duration=6000 s110depth=3start time=00:00:00duration=60000 s2 9快速大范圍查詢depth=0start time=00:00:00duration=60 s2持續性能剖析-聚合存儲CoreJavaWeek 2
60、023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023持續性能剖析-和Tracing關聯HTTP Load BalancerMicro ServiceAPI Gateway
61、Micro ServiceMicro ServiceMicro ServiceMicro ServiceMicro ServicetracingUserServiceItemServiceSellerServiceOrderServiceDatabaseCacheMsgQueue?CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJa
62、vaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023持續性能剖析-和Tracing關聯Request 1Request 2Request 3Sample 1a()b()Sample 2a()c()Sample 3a()b()b()span-1001Sample 1a()c()Sample 1a()b()Sample 3a()Sample 4a()b()Sample 5a()b()b()span-1003Sample 1a()b()Sample 2a()c(
63、)Sample 3a()b()Sample 4a()b()span-1002TracerProfiler ThreadJava Thread 1Java Thread 2span-1001span-1001span-1002span-1002span-1002span-1003span-1003span-1003span-1003CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 20
64、23CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023持續性能剖析-和Tracing關聯tracingUserServiceItemServiceSellerServiceOrderServiceDatabaseCacheMsgQueue?span id=4span id=4span id=1span id=2span id=3CoreJavaWeek 2023CoreJavaWeek 2023CoreJav
65、aWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023阿里云 Continuous ProfilerAlibaba Dragonwell+應用實時監控服務ARMS可以方便診斷出CPU和內存申請熱點方法比常規工具更準確可以在生產
66、環境持續記錄對應用性能影響很小可以幫助提升用戶體驗降低計算成本和資源占用,節省IT支出未來會支持更多性能維度(Lock、Network)Tracing和Profiling的關聯等功能正在研發中CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023
67、CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023總結6CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJava
68、Week 2023性能剖析-簡介性能剖析工具-分類和說明Java Flight Recorder-原理、使用、最佳實踐async-profiler-原理、使用、最佳實踐性能剖析實踐-持續性能剖析、和tracing關聯CONTENTCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 20
69、23CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023感謝聆聽演講人:楊龍CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023