With applications growing more complex everyday, it becomes also more difficult to understand the interaction between their components and the factors that are responsible for loss of performance. An unmanageable number of variables may affect and degrade the efficiency of an application, making it necessary to resort to performance analysis tools in order to achieve even an acceptable level of performance.
Performance analysis tools rely on instrumentation and monitoring tools to perform measurements and collect data. Integrating these tools requires a reasonable amount of time, implying dependence on a specific tool and, in some cases, on a language or environment. In this dissertation, we propose a standard format for both representation of performance data and communication with instrumentation and monitoring tools. We also developed a fast and powerful instrumentation and monitoring engine for Java that makes use of the formats we proposed.
Our tool, called Twilight, is based on state-of-the-art technology for instrumenting and monitoring Java programs, allowing both source code and bytecode instrumentation.
We also created a sophisticated and highly customizable performance analysis tool called Aksum, which allows one to generate several experiments for different input parameters, decides automatically which pieces of an application must be instrumented, and outputs a condensed yet significant analysis of the application's performance. This dissertation also shows how the problem of performance analysis can be formalized using reinforcement learning techniques; such formalization, which we integrated into Aksum, can be used to justify many decisions taken by a tool for automatic performance analysis