1 Nuno Gomes ([email protected])Teste e Qualidade de Software Ferramentas de testes de desempenho, profiling e optimização de aplicações Nuno Gomes
2 Profiling e Optimização de Aplicações ?Todas as actividades de analise dinâmica do código, como a analise de execução de uma aplicação, constituem o profiling. Ferramentas que permitem optimizar uma aplicação e detectar problemas com a utilização de recursos (memória, processador). Análise da memória utilizada. Análise do tempo dispendido e do número de invocações de cada método. Análise da sequência de invocação de métodos.
3 Motivação para a utilizaçãoAnalisar pontos onde os recursos estão a ser desperdiçados, ou estão a ser utilizados de forma ineficiente. Melhorar o tempo de resposta do sistema. Detectar código com defeito. Monitorizar o desempenho da aplicação (valores em percentagem). Teste de tempos (em termos de performance), não podem ser considerados como valores realistas para uma aplicação em produção, devido ao overhead introduzido pela ferramenta.
4 Tipos de ferramentas de profilingFerramentas de optimização embutidas em bases de dados (por exemplo, optimização de queries em run-time). Ferramentas embutidas em sistemas críticos, correndo em run-time optimizando a aplicação. Ferramentas genéricas de apoio ao desenvolvimento de aplicações. Permitindo uma análise dos recursos utilizados na aplicação.
5 Serviços Básicos Análise e estatísticas de cobertura de chamadas a métodos (numero de chamadas) e peso na aplicação. Alocação de memória, hierarquizada por package e por classe, permitindo recorrer a filtros de exclusão. Analise de tempo de execução, ao nível da chamada ao método, de forma a permitir detectar facilmente bottlenecks dentro da aplicação. Objectos referenciados (numero de referências e tamanho). Permitindo detectar facilmente memory leaks.
6 Ferramentas de testes de desempenho, profiling e optimização de aplicaçõesJProbe TPTP YourKit
7 Ambiente de teste CPU: Intel Pentium M-760 RAM: 1 Gb DDR2IDE: Eclipse 3.2 M6 JDK: e 1.5 Aplicação utilizada durante o teste: exercício dos Extensos (repetida vezes, ou com um sleep dentro do ciclo).
8 Aplicação de teste (duas opções)public static void main(String[] args){ for (int i = 0; i < 10000; i++){ int num = (int)(Math.random() * ); System.out.println("\nIteracao: " + i + "\nValor: " + num + "\n" + new Extensos().getNumeroExtenso(num)); } public static void main(String[] args){ for (int i = 0; i < 1000; i++){ int num = (int)(Math.random() * ); System.out.println("\nIteracao: " + i + "\nValor: " + num + "\n" + new Extensos().getNumeroExtenso(num)); try{ Thread.currentThread().sleep(100); }catch (InterruptedException e){ e.printStackTrace(); }
9 JProbe
10 JProbe – Apresentação (1/3)Existem versões Freeware e Comerciais Ferramenta stand-alone Versão testada: Freeware Sistemas suportados: Linux e Windows
11 JProbe – Apresentação (2/3)Integra com vários IDEs: JBuilder 7.0, 8.0 e 9.0 Eclipse 2.x e 3.x IBM Websphere Studio 5.0 IntelliJ DEA 4.0 e 5.0 Oracle 9i Sun One Studio 4.x e 5.0 … Probe Memory Debugger Eliminate Memory Leaks And Excessive Garbage Collection JProbe Memory Debugger helps developers quickly pinpoint memory leaks in Java code and reduce application memory usage, to deliver dramatic improvements in memory consumption and application performance. Java developers can visualize complex data on memory usage, object allocations and garbage collections. View memory usage for a specific class , method , and/or instance. Users can determine the true hidden cost of object creation, track down all references between objects and measure the memory impact of a memory leak or code change. Analyze your memory use faster than ever! Running Memory Debugger in use-case mode delivers virtually instant results you only read into memory the objects needed for a given user execution scenario. Simply turn on the Snapshot generator, run your use case from start to finish, then turn off the Snapshot. Alternatively, if you suspect a lower-level memory leak, use Memory Debugger in “classic mode.” Classic mode analysis encompasses all objects in your application or JVM and can help you isolate even the smallest memory leaks. Features Analyze only the objects needed for a particular use case – or switch to classic mode for a comprehensive analysis Track memory growth at runtime with easy-to-use, two-button analysis Identify the specific reference holding onto to object with Memory Leak Doctor Calculate the size of memory leaks with Memory Instance Calculator Identify and eliminate expensive object cycling with the Garbage Monitor Understand the true hidden cost of object creation with Aggregate Memory Footprint Compare memory usage before and after critical code changes with Snapshot Differencing Automate the collection of memory analysis information Perform local or remote analysis sessions with or without NFS or Samba Generate and share reports and metrics on memory use and Garbage Collection No Source code or source code changes are required to use JProbe Memory Debugger Learn how to use JProbe Memory Debugger quickly through the integrated Java profiling tutorials Unique analytical capabilities for IBM Virtual Machines running on AIX Reverse-engineer IBM text heap dumps into JProbe snapshots Perform memory analysis without the need to invoke a heap dump
12 JProbe – Apresentação (3/3)Permite encontrar memory leaks e falhas de performance rapidamente. Dá uma ênfase especial a partes do código que têm maior impacto na performance da aplicação. Permite executar testes de performance em horas de menor peso no sistema. Permite analises Drill-Down. Probe Memory Debugger Eliminate Memory Leaks And Excessive Garbage Collection JProbe Memory Debugger helps developers quickly pinpoint memory leaks in Java code and reduce application memory usage, to deliver dramatic improvements in memory consumption and application performance. Java developers can visualize complex data on memory usage, object allocations and garbage collections. View memory usage for a specific class , method , and/or instance. Users can determine the true hidden cost of object creation, track down all references between objects and measure the memory impact of a memory leak or code change. Analyze your memory use faster than ever! Running Memory Debugger in use-case mode delivers virtually instant results you only read into memory the objects needed for a given user execution scenario. Simply turn on the Snapshot generator, run your use case from start to finish, then turn off the Snapshot. Alternatively, if you suspect a lower-level memory leak, use Memory Debugger in “classic mode.” Classic mode analysis encompasses all objects in your application or JVM and can help you isolate even the smallest memory leaks. Features Analyze only the objects needed for a particular use case – or switch to classic mode for a comprehensive analysis Track memory growth at runtime with easy-to-use, two-button analysis Identify the specific reference holding onto to object with Memory Leak Doctor Calculate the size of memory leaks with Memory Instance Calculator Identify and eliminate expensive object cycling with the Garbage Monitor Understand the true hidden cost of object creation with Aggregate Memory Footprint Compare memory usage before and after critical code changes with Snapshot Differencing Automate the collection of memory analysis information Perform local or remote analysis sessions with or without NFS or Samba Generate and share reports and metrics on memory use and Garbage Collection No Source code or source code changes are required to use JProbe Memory Debugger Learn how to use JProbe Memory Debugger quickly through the integrated Java profiling tutorials Unique analytical capabilities for IBM Virtual Machines running on AIX Reverse-engineer IBM text heap dumps into JProbe snapshots Perform memory analysis without the need to invoke a heap dump
13 JProbe – Configuração (1/3)É necessário indicar as características especificas da classe de arranque que queremos correr. Como não está integrado com um IDE, é necessário fornecer estes dados.
14 JProbe – Configuração (2/3)Podemos definir filtros de packages e classes a ignorar na analise.
15 JProbe – Configuração (3/3)Podemos definir eventos que são despoletados mediante determinado evento.
16 JProbe – Chamadas a MétodosPermite fazer uma analise gráfica das chamadas aos métodos. Disponibiliza dados em valor absoluto e em percentagem. Permite navegar pelo gráfico através das classes e dos seus métodos. Ordena os valores por colunas de ordenação.
17 JProbe – Lista de MétodosMostra todos os métodos relevantes à analise. Disponibiliza dados em valor absoluto e em percentagem. Permite navegar através das classes e dos seus métodos. Ordena os valores por colunas.
18 JProbe – Detalhe do MétodoFaz uma analise das chamadas ao método. Permite visualizar os métodos chamados a partir deste. Disponibiliza dados em valor absoluto e em percentagem. Permite navegar através das classes e dos seus métodos. Ordena os valores por colunas de ordenação.
19 JProbe – Alocação de MemóriaFaz uma analise das alocação da memória. Não é disponibilizada uma analise mais aprofundada da memória nesta versão, apenas na versão comercial. Na versão comercial este teste cumpre com todos os requisitos.
20 JProbe – Demonstração da Ferramenta
21 JProbe – Pontos Fracos Não suportar JDK 1.5 (na versão freeware).Teste à alocação de memória muito básico (devido a ser versão freeware). Na versão comercial este teste cumpre com os requisitos. Apesar de integrar com vários IDE, funciona como uma aplicação stand-alone, que corre à parte.
22 JProbe – Pontos Fortes Gratuito (versão testada).Permite tirar snapshots durante a execução com o estado da aplicação num dado momento (várias por aplicação). Desta forma, podemos avaliar o desempenho da aplicação ao longo da sua execução. Integração com vários IDEs (um pouco básica). Profiling de aplicações distribuídas.
23 JProbe – Conclusão Cumpre com os requisitos necessários a este tipo de ferramenta (excepto a parte de alocação de memória, nesta versão - freeware). A sua utilização é bastante intuitiva. É uma boa opção para utilizar com IDEs, que não tenham uma ferramenta deste tipo integrada. Permite ter uma ideia clara das referências entre objectos.
24 TPTP
25 TPTP – Apresentação (1/2)Eclipse Test and Performance Tools Platform Open-Source Integrada no Eclipse Contribuições: Computer Associates, IBM, Intel, Compuware, SAP, OC – Systems, Scapa Technologies. Versão testada: 4.2.0
26 TPTP – Apresentação (2/2)Plataforma aberta disponibilizando uma framework, que permite aos programadores criarem ferramentas de teste e de performance únicas, quer comerciais, quer não-comerciais, através da extensão da mesma. Pretende cobrir todas as áreas de teste e performance de software. É a primeira ferramenta Open-Source que disponibiliza uma plataforma universal de testes e performance. Estende a família de tecnologias integradas no Eclipse, fornecendo frameworks e serviços para testes e performance que cobrem o ciclo de vida das aplicações. Esta ferramenta é constituída pelas seguintes funcionalidades: teste, tracing e profiling, tuning, logging, monitorização, analise, automatização de testes e administração. Tem como objectivo fornecer ferramentas e serviços que sejam facilmente estendidos por outros programadores. The Eclipse Test and Performance Tools Platform (TPTP) Project provides na open plataform supplying powerful frameworks and services that allow software developers to build unique test and performance tools, both open source and commercial, that can be easily integrated with the platform and with other tools. TPTP addresses the entire test and performance lifecycle, from early testing to production application monitoring, including test editing and execution, monitoring, tracing and profiling, and log analysis capabilities. The platform currently supports a broad spectrum of computing systems including embedded, standalone, enterprise, and high-performance and will continue to expand support to encompass the widest possible range of systems. The Eclipse Test & Performance Project (TPTP) is the first Open Source project focused on providing a universal platform for the test and performance tools market. TPTP extends the family of Eclipse technologies to provide an open development platform supplying frameworks and services for test and performance tools that are used throughout the lifecycle. These frameworks and services include testing, tracing and profiling, tuning, logging, monitoring, analysis, autonomics and administration. The project also aims to deliver exemplary tools that not only verify the utility of the platform but also serve to illustrate how it can be used, as well as support the development and maintenance of the platform itself. The objective is to ensure that these tools are extensible and can easily be integrated by as wide a range of IT systems/technologies as possible.
27 TPTP - Arquitectura
28 TPTP – Sub-Projectos Platform Project Monitoring Tools ProjectTesting Tools Project Tracing and Profiling Tools Project
29 TPTP - Platform ProjectConstitui a Framework base sobre a qual o desenvolvimento das ferramentas de teste, trace e profiling assentam. Fornece uma interface de utilizador comum aos vários módulos. Contem a estrutura que permite a comunicação (e o controlo) entre os vários módulos bem como o suporte à execução remota. Partilha o acesso aos modelos de dados, bem como às colecções de dados. The TPTP Platform Project provides the core framework upon which the development of the monitoring, testing and tracing and profiling tools relies. It provides common user interface, standard data models, data collection and communications control, as well as remote execution environments.
30 TPTP - Monitoring Tools ProjectEste sub-projecto engloba a parte de monitorização e registo (logging) dentro do ciclo de vida da aplicação, recolhendo e analisando os recursos da aplicação e do sistema. Consegue interrelacionar registos de execução, de múltiplos pontos incluídos na analise na aplicação ou sistema. Permite fazer a monitorização de servidores de aplicações, performance de sistemas, bem como do(s) processador(es) e da utilização da memória. The TPTP Monitoring Tools Project addresses the monitoring and logging phases of the application lifecycle, collecting and analyzing system and application resources. The innovative log analysis tools can correlate disparate logs from multiple points across an environment. The project also includes exemplary tools for monitoring application servers and system performance, such as CPU and memory utilization.
31 TPTP - Testing Tools ProjectEste sub-projecto trata da parte de testes dentro do ciclo de vida da aplicação. É constituído por editores de teste e por ferramentas de deploy e execução de testes. Contem ferramentas de produção de analises, através de relatórios da execução dentro do ambiente de teste. Contem exemplos de ferramentas, prontas a integrar com componentes da Framework JUnit. Incorpora ferramentas de teste a aplicações Web. Permite desenvolver ferramentas de testes manuais. The TPTP Testing Tools Project addresses the testing phase of the application lifecycle. It contains testing editors, deployment and execution of tests, execution environments and associated execution history analysis and reporting. The project also includes exemplary tools for JUnit based component testing tool, Web application performance testing tool, and a manual testing tool.
32 TPTP - Tracing and Profiling Tools ProjectEste sub-projecto trata da parte de tracing e profiling dentro do ciclo de vida da aplicação. Inclui exemplos de ferramentas de profiling quer para sistemas isolados quer para aplicações java distribuídas, recolhendo dados de profiling e trace. Existe também uma ferramenta para inserção de pontos de prova (probe) disponível. The TPTP Tracing and Profiling Tools Project addresses the tracing and profiling phases of the application lifecycle. It includes exemplary profiling tools for both single-system and distributed Java applications through a JVMPI monitoring agent that collects trace and profile data. A generic tool kit for probe insertion is also available.
33 TPTP – Arranque do ProfilingSeleccionando a classe de arranque. Executar o Profiling como uma aplicação Java.
34 TPTP – Configuração do Profiling (1/4)Podemos seleccionar o tipo de teste que pretendemos fazer: Alocação de Memória. Cobertura de Métodos. Chamadas a Métodos. …
35 TPTP – Configuração do Profiling (2/4)Podemos determinar qual a profundidade de analise. Quanto mais profunda mais demorada será, mas poderemos obter informação muito mais rica.
36 TPTP – Configuração do Profiling (3/4)Podemos aplicar Filtros para apenas ser feito o profiling a classes relevantes para a nossa analise.
37 TPTP – Configuração do Profiling (4/4)Podemos estabelecer limites para a execução do profiling.
38 TPTP – Execução da Aplicação
39 TPTP – Alocação de MemóriaPermite visualizar a alocação da memória durante a execução da aplicação. Quer em valor absoluto, quer em percentagem.
40 TPTP – Cobertura de MétodosPermite visualizar a cobertura dos métodos. Apenas indica se o método foi chamado. Não faz uma analise à cobertura de código.
41 TPTP – Chamadas a MétodosPermite visualizar a chamada aos métodos com algum detalhe. Permite navegar pelas sucessivas chamadas de métodos.
42 TPTP – Representação UML das interacções
43 TPTP – Demonstração da Ferramenta
44 TPTP – Pontos Fracos Por vezes surgem alguns bloqueios da própria ferramenta, obrigando a sair e voltar a entrar no Eclipse, para voltar a funcionar. Funcionalidades mais avançadas ainda são pouco intuitivas. Analise de cobertura de código podia ser melhor. Apenas é possível utilizá-lo dentro do Eclipse.
45 TPTP – Pontos Fortes Gratuito.Open-Source, com uma comunidade de desenvolvimento bastante activa. Contem quase todas as funcionalidades que as ferramentas comerciais incorporam. Totalmente integrado com o Eclipse e com os seus plug-ins. Permite a criação de testes automáticos. Profiling de aplicações distribuídas.
46 TPTP – Conclusão Cumpre com todos os requisitos necessários a este tipo de ferramenta, acrescentando algumas funcionalidades que não se encontram noutras ferramentas. Permite retirar diagramas UML da execução da aplicação. Projecto ambicioso, que para já, é uma das melhores ferramentas de profiling encontrada. Permite fazer profiling a servidores de aplicações.
47 YourKit
48 YourKit – Apresentação (1/4)Existem versões Trial (15 dias), Comerciais, Educacionais e Open-Source Ferramenta stand-alone Versão testada: 5.5 Sistemas suportados: Windows, Linux, Solaris e Mac OS X
49 YourKit – Apresentação (2/4)Integra com vários IDEs: JBuilder 7.0 ou superior Eclipse 3.x IntelliJ DEA 4.x e 5.0 JDeveloper 10g Net Beans 4.x e 5.x
50 YourKit – Apresentação (3/4)Permite encontrar memory leaks e falhas de performance rapidamente. Comparação de snapshots. Facilita a detecção de memory leaks. On-demand Profiling, permitindo fazer o profiling apenas quando é preciso (não pesando no sistema). Powerful analysis capabilities: CPU and memory hot spots with devoted views; unique snapshot comparison; memory leak detection; memory distribution reports; measuring of shallow and retained sizes of objects; reporting utility. On-demand profiling: With this cutting-edge feature, you can enable the profiling only when you need it, with application running at its full speed for the rest of the time. For example, you can analyze the current heap state at any moment of application runtime, by capturing memory snapshot. This feature is extremely beneficial for profiling huge applications, with zero overhead. Free embedding into production: You are eligible to distribute profiling DLL with your real-world commercial applications, free of charge. This will help you to ease your product maintenance and improve your customer support. J2EE support: Non-intrusive profiling of high-scale production applications; easy integration with application servers; innovative automatic deobfuscator. Java 5.0 support: YourKit utilizes all advanced Java 5.0 features, including unique support for JVMTI. Quick and easy installation: Straight-forward installation process, with the most reasonable defaults; seamless integration with popular IDEs and application servers; minimum extra configuration. J2ME support: First in the market memory profiling of mobile applications. User-friendliness and usability: Light-weight and intuitive user interface based on tasks; keyboard support; report filtering for quick and deep analysis; profiling is natively incorporated into supported IDE's, to be available from the most obvious and reasonable places. Flexible licensing policy: Multi-platform and multi-processor licensing: commercial, floating, educational, open source licenses available.
51 YourKit – Apresentação (4/4)Suporte para J2EE, através de profiling não intrusivo, facilitando a integração com os servidores de aplicações. Utiliza as novas funcionalidades do JDK 1.5 (através da nova JVM TI). Suporte para J2ME. Execução de aplicações de 32 e 64 bits. Politica de licenças flexível. Powerful analysis capabilities: CPU and memory hot spots with devoted views; unique snapshot comparison; memory leak detection; memory distribution reports; measuring of shallow and retained sizes of objects; reporting utility. On-demand profiling: With this cutting-edge feature, you can enable the profiling only when you need it, with application running at its full speed for the rest of the time. For example, you can analyze the current heap state at any moment of application runtime, by capturing memory snapshot. This feature is extremely beneficial for profiling huge applications, with zero overhead. Free embedding into production: You are eligible to distribute profiling DLL with your real-world commercial applications, free of charge. This will help you to ease your product maintenance and improve your customer support. J2EE support: Non-intrusive profiling of high-scale production applications; easy integration with application servers; innovative automatic deobfuscator. Java 5.0 support: YourKit utilizes all advanced Java 5.0 features, including unique support for JVMTI. Quick and easy installation: Straight-forward installation process, with the most reasonable defaults; seamless integration with popular IDEs and application servers; minimum extra configuration. J2ME support: First in the market memory profiling of mobile applications. User-friendliness and usability: Light-weight and intuitive user interface based on tasks; keyboard support; report filtering for quick and deep analysis; profiling is natively incorporated into supported IDE's, to be available from the most obvious and reasonable places. Flexible licensing policy: Multi-platform and multi-processor licensing: commercial, floating, educational, open source licenses available.
52 YourKit – Configuração (1/2)Dentro do Eclipse podemos correr a aplicação, através da opção Profile.
53 YourKit – Configuração (2/2)Posteriormente teremos de definir os parâmetros da nossa analise de execução.
54 YourKit – Aspecto GeralEcrã principal da aplicação. Permite seleccionar as várias opções. Quer para estatísticas de CPU, quer para memória. Permite visualizar gráficos de alocação dos recursos.
55 YourKit – Utilização de CPU - SnapshotPermite Visualizar a utilização da CPU.
56 YourKit – Chamadas a MétodosPermite visualizar os objectos instanciados. Informação útil sobre os objectos. Permite visualizar as chamadas a métodos. Referências entre os objectos.
57 YourKit – Demonstração da Ferramenta
58 YourKit – Pontos FracosNão foi possível fazer integração total com o Eclipse. Em determinadas partes, a informação podia estar mais detalhada. Devido à sua interface com tudo acessível, dá ideia da informação estar, por vezes, amontoada e sem coerência.
59 YourKit – Pontos FortesImportar snapshots de profiling por HPROF. Suporte para J2ME e profiling remoto. Interface bastante intuitiva e funcional. Permite capturar snapshots de execução para comparação. Documentação de suporte bastante detalhada.
60 YourKit – Conclusão Cumpre com os requisitos necessários a este tipo de ferramenta. Suporta as três variantes do JDK: J2SE, J2EE e J2ME. Derivado da sua interface, permite ter toda a informação à distância de um click. É uma boa opção para utilizar com IDEs, que não tenham uma ferramenta deste tipo integrada (apesar da integração não ser perfeita).
61 Conclusão Geral (1/2) Este tipo de ferramentas é cada vez mais fácil de utilizar e amigável do ponto de vista do utilizador, na detecção dos problemas das aplicações. Ferramentas analisadas ressentem-se um pouco com a carga no servidor. Estão a surgir soluções profissionais gratuitas. São um poderoso auxilio no desenvolvimento de software.
62 Conclusão Geral (2/2) Não existe uma ferramenta genérica ideal!Mas existe uma mais adequada, a determinadas situações, que outra! Por Exemplo: Para utilizar com o Eclipse: TPTP. Para utilizar com todos os sabores do Java: YourKit. Para utilizar com vários IDEs: JProbe.
63 Questões
64 Referências TPTP JProbe YourKit Borland OptimizeIt JProbe YourKit Borland OptimizeIt