I remember the moment that I got my first pair glasses down at Union Square in New York City. I was in my early 20s. It was shocking. Suddenly, the world was sharp. Street signs were visible. Presentations were visible. Nothing was fuzzy. The world was clear. This is kind of what it felt like when I started using FusionReactor to monitor the performance of my ColdFusion servers. That which was a blackbox was suddenly a fountain of information, offering up all kinds of ways in which I could improve the performance of my code and the user experience (UX) of my clients.
I had heard of FusionReactor in the past; but, it wasn't until servers started dying at InVision that I actually installed it, primarily at the behest of Charlie Arehart. While it was emotionally hard to wrap my head around a new piece of software while my own software seemed to be falling apart, FusionReactor quickly proved to be invaluable. For the first time, I could see actual metrics about my servers and the InVision software:
- How many requests were coming in.
- How long requests were taking to process.
- How many JDBC requests were being made.
- How long JDBC requests were taking.
- Which requests were making which JDBC requests.
- Which JDBC requests were taking the longest.
- Which JDBC requests were slow.
- How many CFThreads were running.
- How many CFThreads were being queued up.
- What CFThreads were doing.
- How performance was changing over time.
- Which requests were returning non-2xx status codes.
- How hot the CPU was running.
- Where code was running at this very moment... right... now.
And that's when I was actively looking at the FusionReactor console. When I was doing something silly, like sleeping, FusionReactor was configured to send me stack-traces anytime my server passed a threshold of running requests. So, for example, if there were suddenly 130 concurrently-running requests at 3AM, FusionReactor would dump the entire stack-trace of the ColdFusion instance and email it to me for review. This is what lead to my GitHub-based FusionReactor protection alert parser (which I think is broken at the moment).
Now, FusionReactor is pretty great already; but, at dev.Objective() 2015, David Tattersall, CEO of Intergral, showed me stuff coming up in the next release of the software. It was kind of mind-blowing. They are giving FusionReactor the ability to be a fully-interactive request debugger. I'm talking about pausing running requests, stepping through calls, viewing variables, live-editing code, and resuming. Holy chickens! I can't wait.
And the truth is, I really know and use a fraction of what FusionReactor has to offer (like it's integration with FusionAnalytics for big data performance metrics). One of these days, I have to sit down and really learn the tooling end-to-end.
It's gotten to the point where, if I don't have FusionReactor installed on a server, I panic. I feel like I have no idea what's going. It's like someone ripped away my security blanket. It's definitely a critical component of what has made InVision App, Inc. so successful.