Blog
Java Development
How the YourKit Profiler Helps Us Support Our Customers
AIE can be used as a comprehensive information application development platform. When it's used this way customers can develop arbitrarily complex applications that can have a variety of performance and memory runtime profiles. So whether we are testing an upcoming feature or helping a customer in the field debug a production application, we often turn to the YourKit Java profiler. Aside from the IDE I use every day (Eclipse), YourKit is hands down the most useful developer's tool I use.
The YourKit license allows unrestricted shipment and embedding of the server agent. This enables us to ship the agent with our core product. Since the API supports runtime activation and deactivation of profiling, we can include the profiling capability in all executing instances of AIE. Often performance and memory utilization issues can only be observed in the field while running real applications against real data. This capability allows us to have this support ready to turn on, while having minimal impact on runtime performance or stability. Captured profiling snapshots can then be sent back to the office for analysis.

Whenever we have had an issue with using YourKit, they have responded exceptionally quickly with fixes and updates. They also have a great forum with quick turn around on questions from the development staff. Even if some of the fancier features (which I love but could live without) were not present, this kind of customer service is what makes us feel that we are working with a company we can depend on. This is the type of partnership focus that makes a software company great to work with, and what we always strive to achieve at Attivio. Examples of issues YourKit has addressed for us:
YourKit has all the standard profiler capabilities and some great UI to go along with it. The list below is not at all comprehensive, but includes some of my favorites. It is clear that YourKit has put a lot of thought and effort into providing a tool that helps you work with the snapshot you've got, which is critical for diagnosing production issues.
Sometimes in a multi-threaded application it can be difficult to understand what is going on at a specific time in the application. The YourKit profiler has a threads visualization that helps with this. Its color-coded view shows the state of threads over time and allows you to view the stack traces of all threads at a particular point in time.

When it comes to solving CPU performance issues, the CPU telemetry view is our standard first stop. The Hot Spots link usually directs us to the culprit very quickly. When the problem is more complex than that, the Merged Callees tab allows us to find all the places a particular method is called and allows easy navigation up and down the call stack. The image below shows the ability to select a subset of time in order to further fine tune this analysis:

Sometimes a performance problem is not due to an inefficient algorithm, but due to multiple threads competing for a shared resource. The monitor view helps to track down these types of issues. For each thread, the time it has spent waiting or blocked is displayed along with the stack traces of the various cases.

There's a lot more I don't have time to address. But YourKit is continually innovating and preparing for the future. Probes are an exciting new feature we plan on using that will allow customization and fine-tuning of profiling. There is JRockit and Java 7 support as well.
