Open Source Performance Testing

Similar documents
Benerator Generating Performance Test Data with Benerator

Performance Testing and Optimization in Web-Service Based Applications

Features of The Grinder 3

Using JMeter for Testing a Data Center. Siegfried Goeschl

Various Load Testing Tools

What s Cool in the SAP JVM (CON3243)

WEBLOGIC ADMINISTRATION

Java Performance. Adrian Dozsa TM-JUG

Oracle WebLogic Server 11g Administration

Mohammed Khan SUMMARY

CHAPTER 1 - JAVA EE OVERVIEW FOR ADMINISTRATORS

Open Source and Commercial Performance Testing Tools

Spoilt for Choice Which Integration Framework to choose? Mule ESB. Integration. Kai Wähner

Chapter 1: Web Services Testing and soapui

Tuning WebSphere Application Server ND 7.0. Royal Cyber Inc.

Blackboard Learn TM, Release 9 Technology Architecture. John Fontaine

Instrumentation Software Profiling

ARM-BASED PERFORMANCE MONITORING FOR THE ECLIPSE PLATFORM

How To Test A Web Server

Load Testing with JMeter

HP OO 10.X - SiteScope Monitoring Templates

Java Monitoring. Stuff You Can Get For Free (And Stuff You Can t) Paul Jasek Sales Engineer

JBoss Seam Performance and Scalability on Dell PowerEdge 1855 Blade Servers

Java Power Tools. John Ferguson Smart. ULB Darmstadt 1 PI. O'REILLY 4 Beijing Cambridge Farnham Koln Paris Sebastopol Taipei Tokyo

SOA Solutions & Middleware Testing: White Paper

Evaluation of Load/Stress tools for Web Applications testing

THE BUSY DEVELOPER'S GUIDE TO JVM TROUBLESHOOTING

Scalability Factors of JMeter In Performance Testing Projects

Load Testing Ajax Apps using head-less browser tools. NoVaTAIG April 13, 2011 Gopal Addada and Frank Hurley Cigital Inc.

Web Application Testing. Web Performance Testing

Profiling and Testing with Test and Performance Tools Platform (TPTP)

Monitoring HP OO 10. Overview. Available Tools. HP OO Community Guides

Jérôme Lepage - CFCamp Mondadori France

Performance Testing of Java Enterprise Systems

WebSphere Server Administration Course

Performance Optimization For Operational Risk Management Application On Azure Platform

Application Testing Suite: A fully Java-based software testing platform for testing Oracle E-Business Suite and other web applications

Japan Communication India Skill Development Center

Oracle JRockit Mission Control Overview

Winning the J2EE Performance Game Presented to: JAVA User Group-Minnesota

1 How to Monitor Performance

A Talk ForApacheCon Europe 2008

Jitterbit Technical Overview : Microsoft Dynamics CRM

CERTIFIED MULESOFT DEVELOPER EXAM. Preparation Guide

Java Troubleshooting and Performance

JBS-102: Jboss Application Server Administration. Course Length: 4 days

soapui Product Comparison

PTC System Monitor Solution Training

Glassbox: Open Source and Automated Application Troubleshooting. Ron Bodkin Glassbox Project Leader

WebSphere Training Outline

Course Description. Course Audience. Course Outline. Course Page - Page 1 of 5

Japan Communication India Skill Development Center

Monitoring applications in multitier environment. Uroš Majcen A New View on Application Management.

IBM WebSphere Server Administration

Identifying Performance Bottleneck using JRockit. - Shivaram Thirunavukkarasu Performance Engineer Wipro Technologies

Java Mission Control

1 How to Monitor Performance

Put a Firewall in Your JVM Securing Java Applications!

Practical Performance Understanding the Performance of Your Application

Production time profiling On-Demand with Java Flight Recorder

Applets, RMI, JDBC Exam Review

Performance Monitoring and Tuning. Liferay Chicago User Group (LCHIUG) James Lefeu 29AUG2013

Performance Testing. Why is important? An introduction. Why is important? Delivering Excellence in Software Engineering

Developing Web Services with Eclipse and Open Source. Claire Rogers Developer Resources and Partner Enablement, HP February, 2004

GlassFish v3. Building an ex tensible modular Java EE application server. Jerome Dochez and Ludovic Champenois Sun Microsystems, Inc.

JBOSS ESB. open source community experience distilled. Beginner's Guide. Enterprise. Magesh Kumar B

Performance Testing Process A Whitepaper

Load Testing of Loan Search Project Report

Performance Testing Process

Performance Management from black-art to process

Java in Virtual Machines on VMware ESX: Best Practices

Japan Communication India Skill Development Center

Sisense. Product Highlights.

A Comparison of Software Architectures for E-Business Applications

Tutorial: Load Testing with CLIF

StreamServe Persuasion SP5 StreamStudio

OXAGILE RESUMES SUMMARY OF QUALIFICATIONS TECHNICAL SKILLS SENIOR JAVA SOFTWARE ENGINEER

Japan Communication India Skill Development Center

Apache Jakarta Tomcat

Informatica Data Director Performance

Advanced Liferay Architecture: Clustering and High Availability

Web Performance, Inc. Testing Services Sample Performance Analysis

MagDiSoft Web Solutions Office No. 102, Bramha Majestic, NIBM Road Kondhwa, Pune Tel: /

Oracle Business Activity Monitoring 11g New Features

Liferay Portal Performance. Benchmark Study of Liferay Portal Enterprise Edition

Systems Integration in the Cloud Era with Apache Camel. Kai Wähner, Principal Consultant

Informatica Master Data Management Multi Domain Hub API: Performance and Scalability Diagnostics Checklist

Case Studies of Running the Platform. NetBeans UML Servlet JSP GlassFish EJB

Performance Analysis of webmethods Integrations using Apache JMeter Information Guide for JMeter Adoption

How To Use Java On An Ipa (Jspa) With A Microsoft Powerbook (Jempa) With An Ipad And A Microos 2.5 (Microos)

WebLogic Server Admin

HOL Beat the Beast: Java Performance Problem Tracking with Open Source Tools

Architectural Overview

Automated performance testing using Maven & JMeter. George Barnett, Atlassian Software

Transcription:

Open Source Performance Testing tools and ideas for performance testing OneDayTalk 1. October 2010 15:00-15:45 1

Targets of the talk NOT an introduction to performance testing in general BUT presenting you useful testing and measurement approaches Presenting small, handy and proven open source tools Focus on development and developers Increasing awareness of sometimes neglected topics (Very) brief introductions 2

Agenda If and how to test performance Setting up test data Continuous Performance Testing Monitoring & Profiling (Load Generation) Benerator, Jailer, Talend JUnitPerf, ContiPerf log4jdbc, VisualVM, perf4j (JMeter, Grinder) 3

Have you seen this guy? 13 years of professional software development with Java numerous large scale projects analysis, design, implementation, testing Striving to assure software quality in early project stages Performance focus esp. for J2EE server software Development of open source test tools His name: 4

If and how to test performance About the performance testing process and tool selection 5

We ll do it later,...maybe Do you really need performance testing? No - until it is to late! How embarrassing / expensive will it be when it is too late? Extra project costs image damage missing revenue? You might be able to cope with this failure 6

Scaling your test effort Regard performance testing like an insurance: spending a small effort for reducing the risk of having a large damage Test at least the risky parts of your application Hardware costs Tests on production hardware Performance Prediction Tests on developer hardware Performance Indication Automated component performance tests Manual system performance tests Process costs 7

Use mature tools and frameworks Crossing Moore s chasm adoption idea maturity 3 years Time 8

Test tool fitness How useful is the tool for you? Maturity Usefulness Fitness for the task (shooting flies with cannons? shooting elephants with peas? Extendibility License cost Cost Learning curve (lost work time) Training necessity and cost Productivity (lost work time) Probability that bugs get fixed (open source? dormant/discontinued project?) Risk A cheaper product may be more expensive in the long run! 9

Predicting Production Performance Manual task with high requirements Production-like hardware Production-like data Production-like client behavior Resource and application monitoring for all related systems: CPU, memory, disk I/O, network traffic, VM Heap, Garbage Collections, database load, database query times --> Monitoring --> Interactive Process! --> Requires expertise, not a tool! 10

Performance Testing Process These steps are part of any performance test: for CBT 1. Build application 2. Deploy application 3. Set up server data 4. Set up load generators 5. Run performance test 6. Create report Continuous Performance Testing (CBT) aims at automating performance test process execution Steps 1 and 2 are the classic domain of Continuous integration tools (like Hudson), steps 3 to 6 may be integrated Step 3 is often neglected Steps 4 to 6 require different tools for CBT or manual performance testing 11

Setting up test data Preparing data for the tested system and the load generators 12

Data related test preparations export user data login files setup files create data files batch import files Load Generator create users syntesize test data Application Server LDAP Server Production Database extract & transform production data Database 13

Use Production Data? Is production data existing/available? anonymized? applicable? good enough? Anyway you need to check validity extract subsets generate additional data 14

Anonymization Data might be transferred 1:1 Only confidential and personal data needs to be anonymized Acount Number Generator Person Generator Generator Generator Customer id salutation firstname lastname bankaccountnr bankcode Customer id salutation firstname lastname bankaccountnr bankcode Customer id salutation firstname lastname bankaccountnr bankcode Production DB id.. Order Test DB 15

Anonymization with Benerator Generator classes create composite consistent data graphs (e.g. BankAccountGenerator creates BankAccount --> Bank) Graph parts can be mapped to database columns <database id="prod" readonly="true"... /> <database id="test"... /> <iterate source="prod" type="customer" consumer="test"> <variable name="acct" generator="bankaccountgenerator"/> <attribute name="bank_account_nr" script="acct.accountnumber" /> <attribute name="bank_code" script="acct.bank.bankcode" /> </iterate> <iterate source="prod" type="order" consumer="test" /> 16

Database subsetting If you want to restrict the products to Product A2... Catalog Category A Category B Product A1 Product A2 Product B1 Product Option Product Option Product Option Product Option Product Option Product Option Tariff Component Tariff Component Tariff Component Tariff Component Tariff Component Tariff Component Tariff Component Tariff Component Tariff Component Contract Line Contract Line Contract Line Contract Line Contract Contract Customer Customer Customer Customer Customer Customer...how to keep referential integrity? 17

Jailer Database subsetting tool Active, current version 3.4.7 (2010) Extracts database subsets with referential integrity implicit/explicit foreign keys composition/reference Export in SQL XML DbUnit 18

Data Replication Institute 1 Risk 2 Risk 12 Institute 11 Asset 6 Risk Type 4 Asset 16 Debt 4 Asset Type 9 Debt 14 Debt Type 1 Risk 22 Asset 26 Institute 21 Risk 32 Debt 24 Asset 36 Debt 34 Institute 31 19

Data Generation Defining data synthetically ETL features: extract and transform data from databases or files Generator features: Generating random data Core issue: Matching explicit and implicit constraints in database application For most performance tests, at least a part of data must be generated Experience: Typically stupid random data of little usefulness until... Benerator was there 20

Data Generation with Benerator Define a database db --> execute DDL/SQL scripts --> import data from DbUnit files --> generate valid data --> Demo <database id="db"... /> <execute uri="create_tables.sql" target="db" /> <iterate source="products.dbunit.xml" consumer="db" /> <generate type="db_order" consumer="db"> <id name="id" generator="new DBSequenceGenerator('SEQ_ORDER',db)"/> <reference name="customer" targettype="db_customer" distribution="random" /> <attribute name="created_at" generator="currentdategenerator" /> <attribute name="created_by" script="this.customer" /> </generate> 21

Benerator Architecture Generators, Business Domain Packages person, address, finance, net,... Core Extensions Benerator Core Core Extensions generate, anonymize, replicate Data Import/Export, Metadata Import database, LDAP, JCR, CSV, XML 22

Data related tools Benerator Talend Open Studio Anonymization Database Subsetting Replication Data Generation 23

Continuous Performance Testing Targets, process and tools 24

Continuous Performance Testing Does not replace a carefully monitored manual performance test Usually not aimed at predicting production performance, but at realizing performance trends over development cycles. Nightly builds provide immediate feedback when a change impacts performance Excellent for performance assurance of stable applications The less stable your application interface is, the more expensive. It may become a Continuous Reengineering: Client code (Interface + Data constraints) Data (Client side and server side) 25

Continuous Performance Testing Idea: automated (nightly?) performance testing Controller: Hudson, CruiseControl, Cron Job 1. Build application 2. Deploy application 3. Set up server data 4. Set up load generators 5. Run performance test 6. Create report Maven Ant SQL Maven Plugin Ant Plugin Benerator Jailer Open Studio Benerator Open Studio JUnitPerf ContiPerf Maven Surefire report XSLT -> HTML 26

JUnitPerf Integrates with the JUnit Test Framework Mechanism to create JUnit test suites with multithreaded execution and time limit TimedTest LoadTest public static Test suite() { long maxelapsedtime = 1000; Test testcase = new ExampleTestCase("testExecution"); return new TimedTest(testCase, maxelapsedtime); } public static Test suite() { int maxusers = 10; long maxelapsedtime = 1500; Test testcase = new ExampleTestCase("testExecution"); Test loadtest = new LoadTest(testCase, maxusers); return new TimedTest(loadTest, maxelapsedtime); } 27

JUnitPerf Cons: Made for JUnit 3 needs a special runner to work with JUnit4 Unnecessary programmatical configuration : public static Test suite() { int maxusers = 10; long maxelapsedtime = 1500; Test testcase = new ExampleTestCase("testOneSecondResponse"); Test loadtest = new LoadTest(testCase, maxusers); return new TimedTest(loadTest, maxelapsedtime); }...and dormant since 2008 But there is something new:... 28

ContiPerf Time measurement and evaluation library Integrates with JUnit 4 like JUnitPerf with JUnit 3 Uses Java annotations Stable release Active development Can be used standalone for running and evaluating tests Invoking code with given concurrency and time characteristics Measuring execution times Calculating averages, percentiles, max,... Reporting failure if imposed requirements are violated (throughput, max, average, percentiles) 29

ContiPerf example public class SampleTest { } @Rule public ContiPerfRule rule = new ContiPerfRule(); @Test @PerfTest(duration = 3600000, threads = 20) @Required(throughput = 40, max = 1200, percentile90 = 220) public void test() throws Exception {... } Demo The sample code invokes the test() method for one hour with 20 concurrent threads. It will report test failure if an exception occurs the achieved throughput is below 40 invocations per second the maximum execution time is more than 1200 ms more than 90% of the invocations take more than 220 ms 30

Pitfalls in CPT Don t be too simplistic: Have your database filled with volumes comparable to production Vary your request data Use a reasonable concurrency for testing throughput Use high concurrency for finding locks and race conditions Use long test runs (>= 2h) for checking against memory leaks 31

Monitoring and Profiling Where to look at with which tool 32

Focus your attention For web apps, 90% of performance issues result from logging, O/R Mapping and database, (given that you are using mature frameworks) Learn about monitoring features of your O/R mapper (Hibernate: Statistics MBean) database application server 33

log4jdbc JDBC driver proxy Logs SQL and/or JDBC calls resolves prepared statement params timing feature JDBC config: <category name="jdbc"> <priority value="error"/> </category> <category name="jdbc.sqltiming"> <priority value="info"/> </category> Demo Driver: net.sf.log4jdbc.driverspy URL: jdbc:log4jdbc:hsqldb:hsql://localhost/hsql/relative Output format:... INFO [jdbc.sqltiming] insert into Person (first_name, family_name, gender, id) values ('Hans', 'Elstner', 'm') {executed in 5 msec} 34

JVM Profiling VisualVM (free, extendible) Eclipse TPTP (open source) NetBeans Profiler (open source) JBoss Profiler (open source, 2.0 beta since 2008) JProfiler, YourKit ($$$) JProbe Enterprise ($$,$$$) Usefulness (~ Price) dynatrace ($$,$$$) 35

VisualVM Comes with the JDK since 1.6_07 Invoke jvisualvm Profiling features: Heap Memory, CPU, Garbage Collector stats Extendible Plugins: JMX Monitoring, GC analyis, Thread Dump Analyzer Demo 36

Selfmade Monitoring In mature applications there individual weaknesses which are known with time Often they deserve the insertion of measurement points in the application code. Production-readyness, low overhead runtime activation/deactivation Applied by bytecode instrumentation (aspects, dynatrace) dynamic proxies (e.g. PreparedStatementLogger from jdbacl) explicit code 37

Monitoring Approaches Explicit StopWatch Tool Client 2. login() Service login(user, password) Client 2. login() Service login(user, password) 1. nanotime() 3. nanotime() 1. start() 3. stop() System StopWatch Don t use System.currentTimeMillis() Monitoring Proxy IService login(user, password) OS Tools: JAMon API - dormant (2007) Client 1. login() ServiceProxy login(user, password) 3. login() ServiceImpl login(user, password) Java Simon - active (2010) Timer 2. start() 4. stop() Perf4J - active (2010) 38

Perf4J Similar idea to Simon, plus: Charting Better JMX monitoring Time Slicing Active Version 0.9.3 (2010) Use: Explicit StopWatch or Annotations + AOP No JDBC proxy yet Demo 39

Monitoring EJBs with Perf4J @Stateless public class HelloWorldBean implements HelloWorld { } @Interceptors(org.perf4j.log4j.aop.EjbTimingAspect.class) public void sayhello() { System.out.println("Hello!"); } 40

Load Generation for manual performance tests Introducing JMeter and The Grinder 41

Load Generator GUI Tree-Based graphical configuration of test plans Multithreaded, distributed execution Predefined connectors for HTTP(S), SOAP, JDBC, LDAP, JMS, POP3(S) + IMAP(S) Result aggregation and visualization Extensible: samplers, timers, visualization plugins, functions, scriptable samplers 42

43

Load generator tool generic: can call anything that has a Java API: HTTP, SOAP, REST, CORBA, RMI, JMS, EJB, custom protocols mature HTTP support multi-threaded, multi-process, distributed execution script based (Python) more flexible than JMeter steeper learning curve record & replay GUI: script editor, execution controller & monitor 44

45

Thanks for your attention volker@ 46