A low overhead sampling profiler for Java that avoids safepoint bias and supports CPU, heap, and native memory profiling.
Async-profiler is a low overhead sampling profiler for Java applications that avoids safepoint bias, a common problem in traditional profilers. It supports profiling CPU time, heap allocations, native memory, lock contention, and performance counters, providing accurate performance data with minimal impact on the application. The tool works with OpenJDK and other HotSpot-based JVMs, offering features like kernel and native frame visibility.
Java developers, performance engineers, and DevOps professionals who need to diagnose performance issues, memory leaks, or lock contention in production or development environments. It is particularly useful for those working with high-performance or resource-intensive Java applications.
Developers choose async-profiler for its low overhead and accuracy, as it avoids safepoint bias and provides insights into native memory and non-Java threads. Its support for multiple profiling modes and integration with tools like FlameGraph makes it a versatile and reliable choice for performance analysis.
Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses sampling techniques to minimize performance impact, as emphasized in the README's philosophy of providing comprehensive data with minimal intrusion.
Leverages HotSpot-specific APIs to collect stack traces without the safepoint bias problem, ensuring accurate CPU time profiling as described in the project description.
Supports CPU, heap allocations, native memory, lock contention, and performance counters, detailed in the Key Features section for versatile analysis.
Shows native and kernel frames in stack traces, allowing deeper insights into system-level issues, as mentioned in the README for profiling non-Java threads.
Includes documentation for profiling in containers, making it suitable for modern deployment environments like Docker, as covered in the Profiling In Container guide.
Only works with OpenJDK and other HotSpot-based JVMs, limiting its use with alternative Java runtimes like J9 or GraalVM, as stated in the README.
Requires command-line usage or integration with external tools for visualization, unlike some commercial profilers with graphical interfaces, which may increase the learning curve.
Building from source requires specific tools like GCC 7.5.0+, JDK 11+, and static libstdc++, as noted in the Minimum Requirements, adding setup overhead for custom deployments.