github yandex/perforator v0.2.1

36 minutes ago

Breaking changes:

  • (agent, cli) pprof profiles emitted by Perforator now list inline chain frames in the spec-compliant innermost-first order
  • (cli) perforator pgo now requires explicit --start / --end
  • (cli) The legacy html output format (v1, server-rendered page) is removed. html now always produces the interactive flamegraph viewer (formerly known as html-v2).

Deprecations:

  • (cli) Render format aliases html-v2, flamegraph, flame, fg and vis are deprecated in favor of html
  • (proto) RenderFormat.Flamegraph is deprecated, clients requesting it receive the new HTML viewer output

Behavior changes:

  • (cli) perforator fetch, perforator diff and perforator list now default to the last 24 hours instead of the whole history
  • (storage) Profile merge now strips garbage root frames and sanitizes thread names by default (strip_garbage_root_frames, sanitize_thread_names)
  • (proxy) DiffProfiles responses now default to an HTML flamegraph instead of JSON when no render format is specified.

Features:

  • (agent) Python 3.14 is now supported
  • (agent) Line number collection is now available for python, controlled by feature_flags.enable_python_line_info
  • (cli, web) Python stack prettification can be requested in perforator record, perforator fetch and the web UI
  • (ui) Flamegraph viewer received multiple UX enhancements
  • (cli) perforator profile flamegraph gained --line-numbers and --file-names options
  • (cli) perforator pgo accepts an arbitrary --selector
  • (proxy) Proxy now exposes debuginfod-compatible HTTP API at /api/debuginfod/buildid/... that serves binaries by GNU build-id to standard debuginfod clients
  • (proxy, cli) Microscopes can now be explicitly deleted (using API or perforator microscope delete)
  • (storage) Agents can compress uploaded binaries (zstd) via the binary_compression agent config option
  • (storage) Profile creation tasks accept free-form Annotation metadata echoed back in task info; binary uploads can carry custom string attributes
  • (cli) Separate debug info is now located via /usr/lib/debug/.build-id before falling back to debuginfod
  • (agent) Perforator now respets SFrame (​.sframe) unwind info when available (enabled by feature_flags.enable_sframe)
  • (agent) New --exclude-self agent flag disables profiling the agent itself
  • (storage, proxy, agent) All services support a sampling logging config to reduce log volume
  • (cli) perforator migrate gained --pass-file flag to read database passwords from a file

Fixes:

  • (agent) Fixed that DWARF stack unwinding on ARM64 could produce truncated stacks or fail
  • (agent) Fixed wrong symbolization when an inode number is reused by a different binary
  • (agent) Fixed that profile labels could be missing for freshly created processes
  • (agent) Fixed the configured storage/proxy port being ignored when the agent connects by hostname
  • (agent) Fixed the agent log level flag being ignored.
  • (agent) Fixed corrupted or incomplete binary uploads when the gRPC stream fails mid-transfer
  • (agent) Multiple uprobes attached to the same binary location no longer overwrite each other
  • (agent) Fixed a crash when analyzing binaries with too many TLS variables
  • (offline-processing) GSYM builder better preserves full function names
  • (offline-processing) Fixed a deadlock when binary loading fails
  • (proxy) Fixed torn downloads of large binaries
  • (storage) Profiles pushed with a zero timestamp no longer get lost
  • (cli) profiles recorded with non-default events are no longer mislabeled as cpu.cycles on upload; the --sample-type flamegraph option is now respected
  • (proxy) PGO profile generation now converts addresses correctly for binaries with multiple executable mappings or skewed addresses (e.g. BOLT-optimized binaries) and propagates errors
  • (proxy) DiffProfile tasks now propagate merge options into merge subtasks
  • (ui) Fixed multiple flamegraph UX issues
  • (web) Web serves favicon files
  • (helm) Migration jobs respect the configured imagePullPolicy
  • (migrate) ClickHouse migrations no longer crash when custom TLS CA is configured

Improvements:

  • (symbolizer) C++ function-name shortening better handles return types, ABI tags and templates
  • (cli) HTML flamegraph reports are now gzip-compressed
  • (agent) Profile start time and duration are recorded in profile metadata
  • (docs) Added UI guides
  • (agent) process_discovery.ignore_unrelated_processes config option is now effective when cgroup profiling targets are configured
  • (cli) The --experimental-prettify-python-stacks option changed from a boolean to a level: off, mixed or python-only

Internal changes:

  • Perforator now uses Go 1.26

Don't miss a new perforator release

NewReleases is sending notifications on new releases.