Q: What is Profiling?
A: Profiling gives code-level insight into your application performance in a variety of environments, including in production. By periodically capturing information about the code running in your app during a performance transaction, Sentry’s Profiling tool helps pinpoint the exact functions in your code that are consuming excessive CPU resources and causing performance problems – whether it’s loading screen issues or stuttering scrolls for the frontend user, or heavy infrastructure costs on the backend – so you can take action and fix them quickly.
Q: How is Profiling different from Performance Monitoring?
A: Core performance monitoring functionality like Tracing gives you a high-level overview of your system’s performance, relying on transactions to tell you what is slow and to measure how long it takes. Profiling helps you understand why it’s slow at the code-level, pinpointing the exact file/line number causing the slow request.
Think of profiling as taking a magnifying glass to a transaction or span and seeing exactly what’s happening in the app while that transaction or span is captured. The additional context provided by a profile associated with a transaction can help you quickly debug and fix your performance issue.
Read more about how Profiling complements Tracing and improves your Performance experience here.
Q: How much does Profiling cost?
A: The cost of Profiling is based on a unit consumption model that allows customers to pay for only what they need. Please check out our pricing page for details.
Q: What are performance units?
A: Performance units represent the total number of units that can be used across different Performance event types – which include transactions or transactions with profiling.
A transaction uses 1 performance unit. A transaction with profiling uses 1.3 performance units.
Read here for more info about the Unit-based Performance pricing system. Starting on May 1st, any active projects with Profiling configured will count towards your performance units quota.
Q: How do I update my Sentry plan?
A: Visit the subscription management page and select the plan that fits your team’s needs.
Q: What happens if I try to update my Sentry plan while I’m in the middle of a billing cycle?
A: If you are in the middle of a billing cycle, your last payment will be applied as credits towards the update.
Q: Do you support memory profiling?
A: We currently do not support memory profiling. Only CPU profiling is supported.
Q: What is the performance overhead of using Profiling?
A: Our profilers on each platform are designed to be low overhead in production, such that the impact is not perceptible to an end user. Providing an exact measure of overhead in all conditions is not possible, as it is highly dependent on many factors (OS, language/runtime, hardware, CPU vs. I/O bound workloads, etc.). That said, we target under 5% CPU time overhead on a typical environment for each platform, with mid-spec hardware.
After we collect a profile, we transmit the data to our event ingestion servers. The average payload size for a compressed profile sent over the wire is about 20KB, but the exact payload size will vary depending on the duration of the profile and the file format being used.
Q: How often does the profiler capture samples of the call stack?
A: On all platforms, we sample at 100Hz (100 times per second), which provides 10-millisecond granularity for function timing information. This means that we will be able to capture functions that execute for longer than 10ms, but anything shorter than that may not be represented correctly. This sampling frequency was chosen as a good balance between performance overhead and data fidelity. See our detailed explanation of how sampling profilers work for more information.
Q: How do I get started with Profiling – will I need to install anything?
A: You’ll first have to enable performance monitoring in your app (which takes just 5 lines of code). Profiling hooks into the existing performance transactions in your app so there is no additional work to integrate beyond just enabling profiling in the SDK configuration.
Q: Are profiles captured for every transaction?
A: The number of profiles captured relative to the number of transactions depends on the profilesSampleRate, which is a parameter that is configurable on all of our SDKs. We recommend a default value of 1.0 (100%), which means that a profile will be captured for every transaction. If, for example, you reduced this to 0.5 (50%), we would capture a profile for 50% of all transactions.
Q: Which languages and platforms does Profiling support?
A: Profiling supports the following SDKs:
Our PHP support includes Laravel and Symfony. Our mobile support is limited to native iOS (Swift and Objective-C only) and Android (Java and Kotlin only).
Other platform support is coming soon.
Q: Does my SDK version affect my access?
A: Yes – using an outdated SDK version may result in profiles that are missing associated transactions. To have the most accurate profiling data, please update to the minimum supported version for Profiling: