How do you monitor and debug performance bottlenecks in a JVM-based backend processing massive financial datasets?