load testing collaboration

32
8th Sakai Conference 4-7 December 2007 Newport Beach Collaborative Performance Collaborative Performance Testing Testing Healthy Medicine for Robust Sakai Healthy Medicine for Robust Sakai Code Code

Upload: faridaa-hanifa

Post on 28-Dec-2015

30 views

Category:

Documents


0 download

DESCRIPTION

dshgfjhf

TRANSCRIPT

Page 1: Load Testing Collaboration

8th Sakai Conference

4-7 December 2007Newport Beach

Collaborative Performance TestingCollaborative Performance TestingHealthy Medicine for Robust Sakai CodeHealthy Medicine for Robust Sakai Code

Page 2: Load Testing Collaboration

Collaborative Performance Collaborative Performance TestingTesting

• Using the example of Samigo, how performance testing can help developers find and fix performance defects before production.

Page 3: Load Testing Collaboration

OverviewOverview

• Introductions• Some terms• Michigan performance test setup• Perspectives:

– Tester– DBA– Systems Administrator– Developer

• Questions and Comments

Page 4: Load Testing Collaboration

Who are we?Who are we?

• Lydia Li – Sakai Developer, Stanford University

• Chris Franz – Senior System Administrator, Unicon

• Drew Zhu – Oracle DBA, University of Michigan

• Chris Kretler – Performance Tester, University of Michigan

Page 5: Load Testing Collaboration

What does performance testing What does performance testing mean to me?mean to me?

• Replication of middleware calls

• Tests have different goals:– “Load”– “Stress”– “Benchmark”– “Capacity Planning”

Page 6: Load Testing Collaboration

What does it mean, part IIWhat does it mean, part II

• High data requirements– 500 x 60 x 5 = 150,000 rows

• Response times

• Infrastructure metrics– CPU– Memory

• Concurrent “virtual” users

Page 7: Load Testing Collaboration

What it does not mean:What it does not mean:

• A Simulation– Actual traffic is generated– System cannot tell the difference.

• GUI test

• High-volume functional test– Scope is narrower

Page 8: Load Testing Collaboration

When do we test?When do we test?

• All major releases– New tools– “Significant” builds

• Hardware Evaluations

• Configuration Changes

• Sakai performance testing– Expand our scope

Page 9: Load Testing Collaboration

Michigan Test EnvironmentMichigan Test Environment

• Dedicated testing environment:– Load Balancers (Netscaler RS9000s)– 8 application servers (Dell 2650s running RedHat)– 1 Database server (Sun T2000 running 10g)

• System Administrators (Jeff, Adi, Rick, Ken, Jenny)

• Database Administrator (Drew)• LoadRunner software

Page 10: Load Testing Collaboration

Samigo Setup ProcessSamigo Setup Process

• Working Sakai build w/Samigo

• Determined requirements and focus

• Courses and students were created

• Sample tests imported

• Script creation– Lydia’s help was invaluable here.

Page 11: Load Testing Collaboration

Sample Script PortionSample Script PortionUnderstanding expected result is crucial to script creation.

Page 12: Load Testing Collaboration

Load Test ResultsLoad Test Results

Page 13: Load Testing Collaboration

DBA Tasks in Load Tests DBA Tasks in Load Tests

• Monitoring Database and DB Server

• Produce AWR reports

• Analyze AWR Reports and Identify Issues

• Communicate with Developers, Testers, and Sysadmins

• Query Details and Analyzing Execution Plans

• Provide suggestions

Page 14: Load Testing Collaboration

Oracle OEM Screenshot -1Oracle OEM Screenshot -1

Page 15: Load Testing Collaboration

Oracle OEM Screenshot -2Oracle OEM Screenshot -2

Page 16: Load Testing Collaboration

Oracle OEM Screenshot -3Oracle OEM Screenshot -3

Page 17: Load Testing Collaboration

Samigo Load Test AWRSamigo Load Test AWR• CPU Elapsed CPU per % Total• Time (s) Time (s) Executions Exec (s) DB Time SQL Id• ---------- ---------- ------------ ----------- ------- -------------• 3,184 3,296 68,972 0.05 43.8 38xh90r4gx5cz• select itemgradin0_.ITEMGRADINGID as ITEMGRAD1_139_, itemgradin0_.ASSESSMENTGRAD• INGID as ASSESSME2_139_, itemgradin0_.PUBLISHEDITEMID as PUBLISHE3_139_, itemgra• din0_.PUBLISHEDITEMTEXTID as PUBLISHE4_139_, itemgradin0_.AGENTID as AGENTID139_• , itemgradin0_.SUBMITTEDDATE as SUBMITTE6_139_, itemgradin0_.PUBLISHEDANSWERID a

• 858 858 254,115 0.00 11.4 0byxm85k79suc• select answerfeed0_.ANSWERID as ANSWERID1_, answerfeed0_.ANSWERFEEDBACKID as ANS• WERFE1_1_, answerfeed0_.ANSWERFEEDBACKID as ANSWERFE1_137_0_, answerfeed0_.ANSWE• RID as ANSWERID137_0_, answerfeed0_.TYPEID as TYPEID137_0_, answerfeed0_.TEXT as• TEXT137_0_ from SAM_PUBLISHEDANSWERFEEDBACK_T answerfeed0_ where answerfeed0_.A

• 834 980 79,456 0.01 13.0 3px7qs284b3xk• select answerset0_.ITEMTEXTID as ITEMTEXTID7_, answerset0_.ANSWERID as ANSWERID7• _, answerset0_.ANSWERID as ANSWERID136_6_, answerset0_.ITEMTEXTID as ITEMTEXTID1• 36_6_, answerset0_.ITEMID as ITEMID136_6_, answerset0_.TEXT as TEXT136_6_, answe• rset0_.SEQUENCE as SEQUENCE136_6_, answerset0_.LABEL as LABEL136_6_, answerset0_

• 203 203 43,210 0.00 2.7 9xmw3p1px195k• select count(1) from SAKAI_REALM_RL_FN where REALM_KEY in (select REALM_KEY from• SAKAI_REALM where SAKAI_REALM.REALM_ID IN (:1,:2,:3,:4,:5)) and FUNCTION_KEY i• n (select FUNCTION_KEY from SAKAI_REALM_FUNCTION where FUNCTION_NAME = :6) and (• ROLE_KEY in (select ROLE_KEY from SAKAI_REALM_RL_GR where ACTIVE = '1' and USER_

• 142 142 55,652 0.00 1.9 5n3rvywwp9y7u• select itemmetada0_.ITEMID as ITEMID1_, itemmetada0_.ITEMMETADATAID as ITEMMETA1• _1_, itemmetada0_.ITEMMETADATAID as ITEMMETA1_134_0_, itemmetada0_.ITEMID as ITE• MID134_0_, itemmetada0_.LABEL as LABEL134_0_, itemmetada0_.ENTRY as ENTRY134_0_• from SAM_PUBLISHEDITEMMETADATA_T itemmetada0_ where itemmetada0_.ITEMID=:1

Page 18: Load Testing Collaboration

Samigo Load Test AWRSamigo Load Test AWR• CPU Elapsed CPU per % Total• Time (s) Time (s) Executions Exec (s) DB Time SQL Id• ---------- ---------- ------------ ----------- ------- -------------• 10,105 10,659 2,125,189 0.00 15.2 0byxm85k79suc• select answerfeed0_.ANSWERID as ANSWERID1_, answerfeed0_.ANSWERFEEDBACKID as ANS• WERFE1_1_, answerfeed0_.ANSWERFEEDBACKID as ANSWERFE1_137_0_, answerfeed0_.ANSWE• RID as ANSWERID137_0_, answerfeed0_.TYPEID as TYPEID137_0_, answerfeed0_.TEXT as• TEXT137_0_ from SAM_PUBLISHEDANSWERFEEDBACK_T answerfeed0_ where answerfeed0_.A

• 8,184 8,459 99,794 0.08 12.1 8wcadnu8rwd5b• select count(assessment0_.ASSESSMENTGRADINGID) as col_0_0_ from SAM_ASSESSMENTGR• ADING_T assessment0_ where assessment0_.FORGRADE=1 and assessment0_.AGENTID=:1 a• nd assessment0_.PUBLISHEDASSESSMENTID=:2

• 7,290 8,974 665,235 0.01 12.8 3px7qs284b3xk• select answerset0_.ITEMTEXTID as ITEMTEXTID7_, answerset0_.ANSWERID as ANSWERID7• _, answerset0_.ANSWERID as ANSWERID136_6_, answerset0_.ITEMTEXTID as ITEMTEXTID1• 36_6_, answerset0_.ITEMID as ITEMID136_6_, answerset0_.TEXT as TEXT136_6_, answe• rset0_.SEQUENCE as SEQUENCE136_6_, answerset0_.LABEL as LABEL136_6_, answerset0_

• 5,979 6,189 77,580 0.08 8.8 3cswn2dndzcm0• select assessment0_.ASSESSMENTGRADINGID as ASSESSME1_140_, assessment0_.PUBLISHE• DASSESSMENTID as PUBLISHE2_140_, assessment0_.AGENTID as AGENTID140_, assessment• 0_.SUBMITTEDDATE as SUBMITTE4_140_, assessment0_.ISLATE as ISLATE140_, assessmen• t0_.FORGRADE as FORGRADE140_, assessment0_.TOTALAUTOSCORE as TOTALAUT7_140_, ass

• 2,174 2,232 317,661 0.01 3.2 9xmw3p1px195k• select count(1) from SAKAI_REALM_RL_FN where REALM_KEY in (select REALM_KEY from• SAKAI_REALM where SAKAI_REALM.REALM_ID IN (:1,:2,:3,:4,:5)) and FUNCTION_KEY i• n (select FUNCTION_KEY from SAKAI_REALM_FUNCTION where FUNCTION_NAME = :6) and (• ROLE_KEY in (select ROLE_KEY from SAKAI_REALM_RL_GR where ACTIVE = '1' and USER_

• 1,950 2,026 22,183 0.09 2.9 8su2pcsy7fbq5• select assessment0_.ASSESSMENTGRADINGID as col_0_0_, publisheda1_.ID as col_1_0_• , publisheda1_.TITLE as col_2_0_, assessment0_.AGENTID as col_3_0_, assessment0_• .SUBMITTEDDATE as col_4_0_, assessment0_.ISLATE as col_5_0_, assessment0_.FORGRA• DE as col_6_0_, assessment0_.TOTALAUTOSCORE as col_7_0_, assessment0_.TOTALOVERR

Page 19: Load Testing Collaboration

New Indexes for SamigoNew Indexes for Samigo• create index idx_ASSGRAD_AID_PUBASSEID on

SAM_ASSESSMENTGRADING_T(AGENTID,PUBLISHEDASSESSMENTID) tablespace ctools_indexes; create index IDX_ITEMGRADING_A_GRADINGID on SAM_ITEMGRADING_T(ASSESSMENTGRADINGID) tablespace ctools_indexes; create index IDX_PUBANS_ITEMTEXTID on SAM_PUBLISHEDANSWER_T(ITEMTEXTID) tablespace ctools_indexes; create index IDX_PUBMETDATA_ASSESSMENTID on SAM_PUBLISHEDMETADATA_T(ASSESSMENTID) tablespace ctools_indexes;

Page 20: Load Testing Collaboration

Samigo Load Test AWRSamigo Load Test AWR• CPU Elapsed CPU per % Total• Time (s) Time (s) Executions Exec (s) DB Time SQL Id• ---------- ---------- ------------ ----------- ------- -------------• 4,840 5,046 1,007,039 0.00 21.0 0byxm85k79suc• select answerfeed0_.ANSWERID as ANSWERID1_, answerfeed0_.ANSWERFEEDBACKID as ANS• WERFE1_1_, answerfeed0_.ANSWERFEEDBACKID as ANSWERFE1_137_0_, answerfeed0_.ANSWE• RID as ANSWERID137_0_, answerfeed0_.TYPEID as TYPEID137_0_, answerfeed0_.TEXT as• TEXT137_0_ from SAM_PUBLISHEDANSWERFEEDBACK_T answerfeed0_ where answerfeed0_.A

• 3,489 4,245 315,353 0.01 17.7 3px7qs284b3xk• select answerset0_.ITEMTEXTID as ITEMTEXTID7_, answerset0_.ANSWERID as ANSWERID7• _, answerset0_.ANSWERID as ANSWERID136_6_, answerset0_.ITEMTEXTID as ITEMTEXTID1• 36_6_, answerset0_.ITEMID as ITEMID136_6_, answerset0_.TEXT as TEXT136_6_, answe• rset0_.SEQUENCE as SEQUENCE136_6_, answerset0_.LABEL as LABEL136_6_, answerset0_

• 1,072 1,096 152,652 0.01 4.6 9xmw3p1px195k• select count(1) from SAKAI_REALM_RL_FN where REALM_KEY in (select REALM_KEY from• SAKAI_REALM where SAKAI_REALM.REALM_ID IN (:1,:2,:3,:4,:5)) and FUNCTION_KEY i• n (select FUNCTION_KEY from SAKAI_REALM_FUNCTION where FUNCTION_NAME = :6) and (• ROLE_KEY in (select ROLE_KEY from SAKAI_REALM_RL_GR where ACTIVE = '1' and USER_

• 817 839 220,813 0.00 3.5 5n3rvywwp9y7u• select itemmetada0_.ITEMID as ITEMID1_, itemmetada0_.ITEMMETADATAID as ITEMMETA1• _1_, itemmetada0_.ITEMMETADATAID as ITEMMETA1_134_0_, itemmetada0_.ITEMID as ITE• MID134_0_, itemmetada0_.LABEL as LABEL134_0_, itemmetada0_.ENTRY as ENTRY134_0_• from SAM_PUBLISHEDITEMMETADATA_T itemmetada0_ where itemmetada0_.ITEMID=:1

• 623 643 15,350 0.04 2.7 c55kf9dj75jy4• select count(1) from SAKAI_REALM_RL_FN MAINTABLE LEFT JOIN SAKAI_REALM_RL• _GR GRANTED_ROLES ON (MAINTABLE.REALM_KEY = GRANTED_ROLES.REALM_KEY AND• MAINTABLE.ROLE_KEY = GRANTED_ROLES.ROLE_KEY), SAKAI_REALM REALMS, SAKAI_REAL• M_ROLE ROLES, SAKAI_REALM_FUNCTION FUNCTIONS where ( ROLES.ROLE_NAME in(

Page 21: Load Testing Collaboration

Server Side MonitoringServer Side Monitoring• Ran Perl script to capture CPU utilization on

one of eight app servers as well as the DB server

• The amount of free space in the JVM on one of the application servers was also captured

• Ran ‘tail –f *.log’ on the app servers looking for stack traces, 404 errors, etc.

• When necessary, send a ‘kill –QUIT <jvm pid>’ to get a thread dump of what’s going on inside

Page 22: Load Testing Collaboration

JAVA_OPTSJAVA_OPTSJAVA_OPTS="-server -Xms1500m -Xmx1500m"

JAVA_OPTS="$JAVA_OPTS -XX:NewSize=400m XX:MaxNewSize=400m"

JAVA_OPTS="$JAVA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m"

JAVA_OPTS="$JAVA_OPTS -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"

JAVA_OPTS="$JAVA_OPTS -Dsakai.home=/usr/local/sakai/home -Dsakai.components.root=/usr/local/sakai/components"

JAVA_OPTS="$JAVA_OPTS -Dsakai.security=/usr/local/sakai/home"

JAVA_OPTS="$JAVA_OPTS -Dnetworkaddress.cache.ttl=0 -Dnetworkaddress.cache.negative.ttl=0"

JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0"

JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"

Page 23: Load Testing Collaboration

CPU UtilizationCPU Utilization

• Both application server and database server utilization was spiky

• Application server was in the 20-60% range

• Database server was in the 60-100% range

Page 24: Load Testing Collaboration

CPU Utilization GraphsCPU Utilization Graphs

Page 25: Load Testing Collaboration

App Server Heap UsageApp Server Heap Usage

Page 26: Load Testing Collaboration

Application ProfilingApplication Profiling

• If bottleneck was determined to be on application server side, we were prepared to use JProfiler to capture internal JVM statistics

• Due to its overhead, a profiler can generally

only capture statistics under lighter loads

Page 27: Load Testing Collaboration

Purpose for the tripPurpose for the trip• Identify bottlenecks under load.

– no local performance test environment and expertise

• Establish a baseline for future regression testing.

• Gain confidence in our local deployment.– Samigo is an important tool for our users.

• Publish performance test report to the Sakai community.

Page 28: Load Testing Collaboration

Prepare for Performance TestPrepare for Performance Test• What test case scenarios are we testing?

– Focus on Samigo’s delivery feature.

• What is the expected usage pattern– Our user support team provided the expected # of

concurrent users at Stanford– Emailed and collected other schools’ usage information

• Prepare for the test– Created sample assessments with question types. – Send Chris XMLs to be pre-loaded to the test

environment. – Assisted Chris with load test scripts.

Page 29: Load Testing Collaboration

During the testDuring the test

• Monitored Oracle DB

• Monitored Application Servers,

• Monitored LoadRunner’s test results/graphs.

• Iterative performance tuning based on test results.

Page 30: Load Testing Collaboration

What we learnedWhat we learned

• Database:– Added indexes upon Drew’s recommendation.

• Application:– Optimized application code to reduce excessive

DB calls (SAK-10153)

• No memory leaks found.

Page 31: Load Testing Collaboration

Things we didn’t test in deliveryThings we didn’t test in delivery

• Focused on Samigo’s Delivery only– Did not test Audio and File Upload questions due

to limited time– Audio/File upload questions are heavily used at

Stanford. Please let us know if you have questions.

Page 32: Load Testing Collaboration

SummarySummary

• Performance test helps to identify bottlenecks under load.

• Establishes a baseline for future testing. – Identify performance improvement/degradation in future

releases.

• Load test should be an integral part of release.

• Performance test report can be found at http://bugs.sakaiproject.org/confluence/display/SAM/Home