In this article, the authors share their experience detecting and diagnosing performance problems in production and open source benchmark applications through the presentation of three case studies based on actual situations. These case studies highlight how various IBM tools, such as Garbage Collection and Memory Visualizer (GCMV) and IBM Monitoring and Diagnostic Tools for Java - Memory Analyzer (MAT), can be used together to diagnose complex performance problems through the analysis of verbose garbage collection logs, heapdumps and threaddumps.