A Java Agent for distributed JVM profiling, collecting metrics and tracing methods for Hadoop/Spark applications.
Uber JVM Profiler is a Java Agent that collects performance metrics and stack traces from JVM processes in distributed environments like Hadoop and Spark. It helps developers monitor CPU, memory, and IO usage across multiple machines, trace method calls, and generate flame graphs to identify performance bottlenecks.
Developers and engineers working with distributed JVM applications, particularly those using Hadoop, Spark, or other large-scale Java-based data processing frameworks who need to profile performance across clusters.
It offers distributed profiling without code changes, supports flexible metric reporting to Kafka or custom endpoints, and provides advanced features like method argument tracing and flame graph generation for deep performance analysis.
JVM Profiler Sending Metrics to Kafka, Console Output or Custom Reporter
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Collects CPU, memory, and IO metrics from multiple JVM processes across clusters, enabling easy correlation for Spark applications as described in the README.
Profiles arbitrary Java methods and arguments without modifying application code, useful for tracing HDFS call latencies and file paths per the README examples.
Supports output to Kafka, console, or custom reporters via configurable parameters, with built-in reporters like KafkaOutputReporter for scalable metric aggregation.
Samples stack traces to generate flame graphs for CPU visualization, including provided Python scripts for collapsing data, as detailed in the 'Generate flamegraph' section.
Requires Maven builds with specific profiles for custom reporters and verbose command-line arguments for Java Agent attachment, which can be error-prone and time-consuming.
Focuses on core features with sparse advanced guides; custom reporter implementations are hinted at but not thoroughly documented, relying on user exploration.
As a Java Agent, it introduces runtime overhead that can impact application performance, especially with low sample intervals or in resource-constrained environments.