The importance of performance profiling
Profiling tools are a critical part of application development and operations. Problems, such as memory leaks or high CPU load, may make applications, developed over the course of serval months, unusable in minutes. Problems like this are very hard to localize and fix without special tools, such as profilers.
The problem with on-demand profiling
Traditional profiling tools are associated with on-demand profiling and high overhead. They are mostly used during development stages and not in production. If used in production, which is very rare due to overhead consideration, they are normally attached to applications for short periods of time. This is a big problem for modern development practices and application architectures; for example, continuous delivery with frequent releases and microservice architectures. Containerized applications, are another obstacle, because they make it hard to actually locate and connect to a particular application process.
Applications execute differently in development and production environments due to differences in load, data and infrastructure. Ironically, many CPU load issues are associated with algorithm complexity, which correlates with the load and data. Similarly, memory leaks are associated with load along with the running time of the application, which are common in production environments.
Continuous and automatic production profiling
Because of the complexity of performance related problems, these problems are mostly unpredictable and only detectable when viewed in the context of historical application execution.
StackImpact’s Go (Golang) profiler is designed for the modern technology stack. The key concepts behind it are:
- Regular and anomaly-triggered profiling during the whole application lifecycle
- Historical profile analysis
- Profiling context for application change-related root cause identification
- Integrated health and error monitoring
- Production-appropriate low overhead
See documentation for more information.