A seemingly routine Java version upgrade triggered a production incident that revealed a memory leak which had been silently present for three years. The leak was previously hidden because an older garbage collection mechanism was inadvertently cleaning it up. This article walks through the symptoms—monitoring showed green, but containers were crashing—and the investigation that followed. The author shares how they traced the issue back to a video thumbnail generation feature, where a resource was never properly released. The key takeaway is that changes in runtime behavior, such as GC algorithm updates, can expose latent bugs. This case study emphasizes the importance of deep runtime understanding and proactive memory profiling, even when metrics appear healthy.
A real-world case study of a memory leak masked by old GC behavior, uncovered by a Java upgrade. Lessons in observability and debugging.