My blog post earlier this month about what causes Ruby memory bloat, and about a way to potentially reduce memory usage by 70%, triggered quite a storm in the community! It's clear that I stumbled upon a significant pain point.
Ruby apps can use a lot of memory. But why? Various people in the community attribute it to memory fragmentation, and provide two “hacky” solutions. Dissatisfied by the current explanations and provided solutions, I set out on a journey to discover the deeper truth and to find better solutions.
Linux has two well-known tracing tools:
- strace allows you to see what system calls are being made.
- ltrace allows you to see what dynamic library calls are being made.
Though useful, these tools are limited. What if you want to trace what happens inside a system call or library call? What if you want to do more than just logging calls, e.g. you want to compile statistics on certain behavior? What if you want to trace multiple processes and correlate data from multiple sources?
This article shows you how to setup bpftrace and teaches you its basic usage. I'll also give an overview of how the tracing ecosystem looks like (e.g. "what's eBPF?") and how it came to be what it is today.
Some people I know tend to have an air of confidence around them. They wield their Steve Jobs reality distortion field, commanding attention and persuading people. They almost always act like they are certain of everything.
My natural inclination appears to be the opposite: I tend to be careful until I have done a careful analysis. I only act confident when I am sure, which can take a while. I think a lot about whether I am doing the right thing.
Experience has given me reason to believe that I am more self-aware than many other people. Yet I have also learned that this self-awareness comes at a price. Thus, I have been wondering why I am like this, and what I should learn from self-certain people.
When developing a Rails app, have there been times when you’re wondering “what properties/columns does this model have”? The easiest way to find out is by inspecting db/schema.rb, but that gets annoying quickly. If only there’s a way to keep your schema closer to you. Enter the annotate gem.
There’s something wrong with the way most companies do performance reviews. Here’s why, and here’s how I do them.
Lots of friction and frustration in teams are caused by miscommunication. How do these occur and what should be our attitude towards them?
Over the course of twenty years, I’ve noticed that my philosophy about software and the development thereof differs significantly from many other software developers and IT people. Here’s how, and here’s why I think coding should not be the most important thing.