Currently many web server applications are built by integrating numerous layers of libraries and frameworks. Performance problems in these framework-intensive systems are often difficult for users to understand for many reasons. First, a typical performance problem is not a single hot method, but rather a pattern of problematic activity spanning many frameworks. Transactions usually contain multiple problems, often having overlapping elements that need to be teased apart. Second, the person performing the analysis is unlikely to be familiar with most of the framework code that is executed. Third, collecting traces with enough context information to aid with explanation of program behavior is often impractical, as it is too intrusive in production settings. The increasing complexity of these multi-layered systems has created a need for software tools to aid users in understanding reasons for their good and bad performance. A viable approach to providing such explanations must present results at a level of abstraction above single statements, methods, or even paths. Analyses are needed to identify coherent units of activity and groups of related objects for a given execution. Multiple layers of explanation can then be added to help the user discern and diagnose performance problems resulting from multiple layers of unfamiliar framework code.
Our research focus is to devise synergistic combinations of static and dynamic program analyses that will enable software tools to aid user understanding of the performance of framework-intensive applications. Few previous investigations in program analysis have addressed framework-based applications which (we believe) exhibit their own idiosyncratic patterns of behavior, unlike for example, the compiler benchmarks to which program analyses traditionally have been applied.