Archive by Author

Automatic Database Call Tracing in Go Applications

Some of the most common root causes of performance bottlenecks in web applications are databases. This is true for any language and Golang is not exception. To trace database call performance in Go, legacy tracing mechanisms should be added around each query or call, which will decrease readability of the code. This mechanism is also […]

Read More Comments Off on Automatic Database Call Tracing in Go Applications

It’s Time for Faster Languages And Optimized Applications

The Moore’s law is in crisis. The slowdown in CPU speed increase became noticeable as we’ve approached quantum sizes for transistors, where things behave differently, e.g. tunnelling effect kicks in. There is enough written on this topic already. While alternatives to a silicon chip are under active research, the uncertainty remains, at least for now. […]

Read More Comments Off on It’s Time for Faster Languages And Optimized Applications

Monitoring Errors and Panics in Go

Every error, exception or crash in production application can directly affect customer experience. To improve application quality errors and crashes should be continuously detected and eliminated. To efficiently do so, the following insights are necessary: The stack traces of the errors and crashes. Without this information localizing the root cause may be extremely difficult. Number […]

Read More Comments Off on Monitoring Errors and Panics in Go

Measure Go Code Segment Performance and Detect Bottlenecks

StackImpact automatically covers many aspects of application performance measurement. These include hot spots in CPU usage, memory allocations, I/O, channels and lock contention. It also provides a bottleneck view for HTTP handlers and calls as well as multiple runtime metrics. It is sometimes necessary to measure application specific code performance and trace bottlenecks. For these […]

Read More Comments Off on Measure Go Code Segment Performance and Detect Bottlenecks

Why Monitoring Isn’t Enough for Modern Applications

Monitoring vs. profiling in production Any serious production application is accompanied with monitoring and alerting. If not, the downtime or performance issues will stay unnoticed for longer, which will obviously negatively impact any organization. However, knowing that there is a problem is just one step towards solving it. Solving performance and availability issues requires knowledge […]

Read More Comments Off on Why Monitoring Isn’t Enough for Modern Applications

Detecting Lock Contention in Go

Mutexes are often a source of contention, which results in performance issues or deadlocks. This is not different in Go. In some cases, e.g. some obvious deadlock situations, where all goroutines are waiting, the runtime may be able to detect/predict mutex related issues and panic. Generally, the problems will manifest themselves at the application logic […]

Read More Comments Off on Detecting Lock Contention in Go

Monitoring CPU Hot Spots in Production Go Applications

Identifying CPU hots spots with line-of-code precision is critical when it comes to troubleshooting performance issues, identifying performance bottlenecks or improving response for better customer experience. Go pprof toolset has powerful tools for CPU profiling and visualizing different aspects of profiles. It is very useful at development stage. However, profiling CPU usage on production environments […]

Read More Comments Off on Monitoring CPU Hot Spots in Production Go Applications

Memory Leak Detection in Production Go Applications

Memory leaks are very common in almost any language, including garbage collected languages. Go is not an exception. A reference to an object, if not properly managed, may be left assigned even if unused. This usually happens on an application logic level, but can also be an issue inside of a imported package. Unfortunately it […]

Read More Comments Off on Memory Leak Detection in Production Go Applications

Profiling Go Applications in Production

Production environments are different from development and staging. Whether optimizing application performance or trying to find a problem root cause, it is often necessary to use Go’s profiling tools in production. Obviously, before doing anything in production, especially for performance optimizations, it makes sense to try to simulate production load and generate for example CPU […]

Read More Comments Off on Profiling Go Applications in Production