Troubleshooting Web Site Performance Issues with Visual Studio Team System Martin Kulov Director.NET Development National Academy for Software Development MVP – VSTS, MCT, MCSD, MCPD
What We Will Cover How testing processes can help us deliver quality code Measuring performance of ASP.NET sites Improving ASP.NET performance
Session Prerequisites.NET Framework intermediate level ASP.NET intermediate level Windows Counters basic level Level 200
Agenda WWW (Why, When, What) to test Web Applications Tests Performance Testing ASP.NET applications Profiling ASP.NET Applications Measuring ASP.NET Applications Tuning ASP.NET Applications
Why we should test Quality increase Finding and fixing design problems Lowering TCO and maintenance costs
When we should test As often as possible As early as possible Test automation would help a lot
What we should test Critical business features Everything else Everything else The clearer performance goals are, the better we will know what to test PMs should get these goals defined from the start
Testing Web Applications Testing types Functional Testing Performance Testing Security Testing Reliability Testing Usability Testing others …
Performance Testing Most critical and often neglected type of test It should be done during each phase of the project There are three main principles MeasureMeasureMeasure Set your desired goals Tune the application
Setting your goals Response time Latency on the server Latency on the client (TTFB and TTLB) Throughput Resource utilization Identify problem areas Define workload profiles
Profiling ASP.NET Applications Profiling is the process of collecting data We can measure the result Profiling is done though code instrumentation In instrumentation we inject additional code to the system so it can generate events
System Resources Counters CPU Counters Processor\% Processor Time Processor\% Privileged Time Processor\% Interrupt Time System\Processor Queue Length System\Context Switches/sec
System Resources Counters Memory Counters Memory\Available Mbytes Memory\Page Reads/sec Memory\Pages/sec Memory\Pool Nonpaged Bytes Server\Pool Nonpaged Failures Server\Pool Paged Failures Server\Pool Nonpaged Peak Memory\Cache Bytes Memory\Cache Faults/sec
System Resources Counters Network Counters Network Interface\Bytes Total/sec Network Interface\Bytes Received/sec Network Interface\Bytes Sent/sec Server\Bytes Total/sec [Protocol_Object]\Segments Received/sec [Protocol_Object]\Segments Sent/sec Processor\% Interrupt Time
System Resources Counters Disk I/O Counters PhysicalDisk\Avg. Disk Queue Length PhysicalDisk\Avg. Disk Read Queue Length PhysicalDisk\Avg. Disk Write Queue Length PhysicalDisk\Avg. Disk sec/Read PhysicalDisk\Avg. Disk sec/Transfer PhysicalDisk\Disk Writes/sec
Managed Code Counters Memory Counters Process\Private Bytes.NET CLR Memory\% Time in GC.NET CLR Memory\# Bytes in all Heaps.NET CLR Memory\# Gen N Collections.NET CLR Memory\# of Pinned Objects.NET CLR Memory\Large Object Heap Size
Managed Code Counters Other Counters Working Set Process\Working Set Exceptions.NET CLR Exceptions\# of Exceps Thrown / sec Contention.NET CLR LocksAndThreads\Contention Rate/sec.NET CLR LocksAndThreads\Current Queue Length
Managed Code Counters Other Counters Threading.NET CLR LocksAndThreads\# of current physical Threads Thread\% Processor Time Thread\Context Switches/sec Thread\Thread State Code Access Security.NET CLR Security\Total RunTime Checks.NET CLR Security\Stack Walk Depth
ASP.NET Counters Worker Process ASP.NET\Worker Process Restarts Throughput ASP.NET Applications\Requests/Sec Web Service\ISAPI Extension Requests/sec ASP.NET\Requests Current ASP.NET Applications\Requests Executing ASP.NET Applications\Requests Timed Out Response time / latency ASP.NET\ Request Execution Time
ASP.NET Counters Cache ASP.NET Applications\Cache Total Entries ASP.NET Applications\Cache Total Hit Ratio ASP.NET Applications\Cache Total Turnover Rate ASP.NET Applications\Cache API Hit Ratio ASP.NET Applications\Cache API Turnover Rate ASP.NET Applications\Output Cache Entries ASP.NET Applications\Output Cache Hit Ratio ASP.NET Applications\Output Cache Turnover Rate
Tuning ASP.NET Applications Tuning Process Performance tuning is an iterative process On every step we should identify and eliminate bottlenecks Retest and measure again to see if we are closer to our performance goals
Tuning ASP.NET Applications Tuning Categories Application Configuration settings web.configPlatform.NET Framework Web Server OSDatabaseSystem CPU, Memory, I/O, etc…
Tuning ASP.NET Applications Tune the thread pool <processModel enable="true" timeout="Infinite“ idleTimeout="Infinite“ shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000" restartQueueLimit="10“ memoryLimit="60“ webGarden="false" cpuMask="0xffffffff" userName="machine“ password="AutoGenerate" logLevel="Errors“ clientConnectedCheck="0:00:05“ comAuthenticationLevel="Connect“comImpersonationLevel="Impersonate“responseDeadlockInterval="00:03:00" maxWorkerThreads="20“ maxIoThreads="20"/>
Tuning ASP.NET Applications Tune the thread pool <httpRuntime executionTimeout="90" maxRequestLength="4096“ useFullyQualifiedRedirectUrl="false"minFreeThreads="8"minLocalRequestFreeThreads="4"appRequestQueueLimit="100"enableVersionHeader="true"/>
Tuning ASP.NET Applications Recommended settings Recommended Threading Settings for Reducing Contention Configuration settingDefault (.NET 1.1)Recommended value maxconnection212 * #CPUs maxIoThreads20100 maxWorkerThreads20100 minFreeThreads888 * #CPUs minLocalRequestFree- Threads476 * #CPUs
Tuning ASP.NET Applications Other settings Set memory limit IIS 6.0 manager Set timeouts Evaluate use of RequestQueueLimit
Tuning ASP.NET Applications Other settings Disable tracing and debugging Disable session state Disable View State <configuration><system.web> </system.web></configuration>
Demonstration 1 Profiling and load testing ASP.NET applications with Visual Studio Team System 2005 for Software Testers
Session Summary The inevitable software testing process Measuring performance of ASP.NET applications Tuning performance of ASP.NET applications Visual Studio Team System 2005 for Software Testing provide integrated profiling, load testing and reporting environment
Next Steps Create load profiles for your application Prepare and analyze reports from load testing Identify and resolve bottlenecks Tune Windows OS performance Tune ADO.NET performance Tune SQL Server performance
For More Information Microsoft patterns & practices Improving.NET Application Performance and Scalability /library/en-us/dnpag/html/scalenet.asp
Additional Resources Rico Mariani’s blog Maoni's WebLog Bulgarian Association of Software Developers Martin Kulov’s blog
Questions and Answers Submit text questions using the “Ask” button. Don’t forget to fill out the survey. For upcoming and previously live webcasts: Got webcast content ideas? Contact us at: Today's webcast was presented using Microsoft Office Live Meeting. Get a free 14- day trial by visiting: Today's webcast was presented using Microsoft Office Live Meeting. Get a free 14- day trial by visiting: