《杨龙-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版本上开销都低栈可能不准可能引起JVM 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