Start your free 14-day ContainIQ trial

Continuous Profiling in Kubernetes With ContainIQ

ContainIQ provides a toolset for continuous profiling in Kubernetes. In this article, we explore the use cases, benefits, as well as overhead of using the tool.

October 6, 2022
Nate Matherson

Continuously profiling applications helps engineering teams spot performance bottlenecks and troubleshoot issues faster. And for companies running applications in Kubernetes​​, profiling is a modern and essential practice for catching and improving upon resource-consuming application code.

At ContainIQ, we provide several tools for Kubernetes monitoring and troubleshooting. Included, ContainIQ offers an eBPF-based profiler for continuous profiling with minimal overheard. With ContainIQ’s profiler, engineers can improve the mean time to resolution, quickly spot performance issues, and identify ways to reduce unnecessary cloud spending. And it works out of the box without additional instrumentation.

In this article, we highlight ContainIQ’s profiling feature set with a quick explanation of functionality, implementation, and benefits.

How Does ContainIQ’s Profiler Work?

With ContainIQ, users can profile continuously and have visibility into every workload running in a Kubernetes cluster. Users can capture stack traces from individual applications all the way down to the kernel system calls and the functions that they rely on.

And because ContainIQ is eBPF-based, there isn’t any additional code instrumentation to get up and running.

As seen above, with ContainIQ, users can view all stack traces from individual applications. This helps identify the functions which are being called most frequently and identify performance bottlenecks. On the horizontal axis, you have the sample population, and on the vertical axis, you have the stack trace. By clicking on an individual stack frame, users can see all of the children of the stack. Or in other words, users can identify slow functions and functions that are consuming the majority of their CPU.

Users are able to search by pod name, and search by process name using the search tools at the top of the profiler. Users can also filter by cluster, namespace, and date range, including time. For example, users could drill into a narrow one-hour range or view performance over time, as far back as the past 14-days.

By clicking on an individual stack frame, users can see all of the children of the stack. Or in other words, users can identify slow functions. ContainIQ offers support for C/C++, Go, Rust, Python, Ruby, and Node.

Using ContainIQ’s role-based access control, users can designate permissions for other users on a cluster-by-cluster basis, allowing them to profile only specific applications. Across the entire ContainIQ platform, users can set alerts and trigger notifications to Slack or various destinations using a webhook.

Pricing is straightforward in that the profiler is included for no additional charge as part of our standard pricing.

How to Implement ContainIQ’s Profiler

Getting started with ContainIQ is simple. Users are able to create an account using the self-service sign-up experience.

After creating an account at ContainIQ, the installation process is easy and should only take a few minutes. As described in our documentation, users can install ContainIQ using the deployment file or, more commonly, with Helm.

And that’s it! ContainIQ’s profiler was designed to work out of the box without any additional instrumentation. We can deliver this experience by using eBPF to access the kernel directly instead of collecting data at the application layer directly.

ContainIQ works across all of the major cloud platforms such as EKS, EKS with Fargate, GKE, and AKS.

Analyzing Overheard

Overheard is often a concern for companies who want the functionality of a profiler but who are concerned about performance. Fortunately, ContainIQ’s profiler is low overhead and can be run continuously without worry.

The table below shows the results of OpenSSL speed <terminal inline>aes-256-cbc<terminal inline> with and without the profiler running:

16 bytes 64 bytes 256 bytes 1025 bytes
w/ profiler 1043007.15k 1160834.18k 1192975.96k 1200173.40k
w/out profiler 1047426.12k 1161207.89k 1193153.37k 1197388.71k

As shown above, the additional overhead of using ContainIQ’s profiler is minimal. This is important because using a toolset with lower overhead means lower latency and less computing resources consumed.

Final Thoughts

In this article, we highlighted ContainIQ’s profiler. With ContainIQ, engineering teams running workloads on Kubernetes can access critical information regarding application performance and resolve issues with slow or inefficient code.

ContainIQ’s eBPF-based approach means that users can continuously profile without being concerned about overhead.

To get started, users can sign-up for an account [here]( You can also book a demo with a team member if you’d like a more formal demo or to onboard to the platform together.

Start your free 14-day ContainIQ trial
Start Free TrialBook a Demo
No card required
Nate Matherson

Nate Matherson is the Co-founder & CEO of ContainIQ. An experienced entrepreneur and technologist, he has founded multiple venture-backed companies and is a two-time Y Combinator Alum. Nate is also an active angel investor.