Skip to content

Loader for 4.0 (v10): Heatmaps and Native memory profiling

Latest
Compare
Choose a tag to compare
@parttimenerd parttimenerd released this 15 Apr 11:10
· 3 commits to main since this release

ap-loader v10

  • Drop support for async-profiler < 4.0 versions, as 4.0 changed how its tested
  • Major changes in the usage of the JFR conversion made by async-profiler
    which are not hidden
  • Clean up the code

The following is copied from the wrapped async-profiler release by Andrei Pangin. The source code linked below should be ignored.

v4.0

Features

  • #895, #905: jfrconv binary and numerous converter enhancements
  • #944: Interactive Heatmap
  • #1064: Native memory leak profiler
  • #1002: An option to display instruction addresses
  • #1007: Optimize wall clock profiling
  • #1073: Productize VMStructs-based stack walker: --cstack vm/vmx
  • #1169: C API for accessing thread-local profiling context

Improvements

  • #923: Support JDK 23+
  • #952: Solve musl and glibc compatibility issues; link libstdc++ statically
  • #955: --libpath option to specify path to libasyncProfiler.so in a container
  • #1018: --grain converter option to coarsen flame graphs
  • #1046: --nostop option to continue profiling outside --begin/--end window
  • #1178: --inverted option to flip flame graphs vertically
  • #1009: Allows collecting allocation and live object traces at the same time
  • #925: An option to accumulate JFR events in memory instead of flushing to a file
  • #929: Load symbols from debuginfod cache
  • #982: Sample contended locks by overflowing interval bucket
  • #993: Filter native frames in allocation profile
  • #896: FlameGraph: Alt+Click to remove stacks
  • #1097: FlameGraph: N/Shift+N to navigate through search results
  • #1182: Retain by-thread grouping when reversing FlameGraph
  • #1167: Log when no samples are collected
  • #1044: Fall back to ctimer for CPU profiling when perf_events are unavailable
  • #1068: Count missed samples when estimating total CPU time in ctimer mode
  • #1142: Use counter-timer register for timestamps on ARM64
  • #1123: Support clock=tsc without a JVM
  • #1070: Demangle Rust v0 symbols
  • #1007: Use ExecutionSample event for CPU profiling and WallClockSample for Wall clock profiling
  • #1011: Obtain can_generate_sampled_object_alloc_events JVMTI capability only when needed
  • #1013: Intercept java.util.concurrent locks more efficiently
  • #759: Discover available profiling signal automatically
  • #884: Record event timestamps early
  • #885: Print error message if JVM fails to load libasyncProfiler
  • #892: Resolve tracepoint id in asprof
  • Suppress dynamic attach warning on JDK 21+

Bug fixes

  • #1143: Crash on macOS when using thread filter
  • #1125: Fixed parsing concurrently loaded libraries
  • #1095: jfr print fails when a recording has empty pools
  • #1084: Fixed Logging related races
  • #1074: Parse both .rela.dyn and .rela.plt sections
  • #1003: Support both tracefs and debugfs for kernel tracepoints
  • #986: Profiling output respects loglevel
  • #981: Avoid JVM crash by deleting JNI refs after GetMethodDeclaringClass
  • #934: Fix crash on Zing in a native thread
  • #843: Fix race between parsing and concurrent unloading of shared libraries
  • #1147, #1151: Deadlocks with jemalloc and tcmalloc profilers
  • Stack walking fixes for ARM64
  • Converter fixes for jfrsync profiles
  • Fixed parsing non-PIC executables and shared objects with non-standard section layout
  • Fixed recursion in pthread_create when using native profiling API
  • Fixed crashes on Alpine when profiling native apps
  • Fixed warnings with -Xcheck:jni
  • Fixed "Unsupported JVM" on OpenJ9 JDK 21
  • Fixed DefineClass crash on OpenJ9
  • JfrReader should handle custom events properly
  • Handle truncated JFRs

Project Infrastructure

  • Restructure and update documentation
  • Implement test framework; add new integration tests
  • Unit test framework for C++ code
  • Run CI on all supported platforms
  • Test multiple JDK versions in CI
  • Add GHA to validate license headers
  • Add Markdown checker and formatter
  • Add Issue and Pull Request templates
  • Add Contributing Guidelines and Code of Conduct
  • Run static analyzer and fix found issues (#1034, #1039, #1049, #1051, #1098)
  • Provide Dockerfile for building async-profiler release packages
  • Publish nightly builds automatically